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

      SUBROUTINE REGROUP(PSPEC,KWTRA,PETO,PERIO,PDIR,KBLO,KJS,KJL,          1,1REGROUP.25     
     %                   KANG,KFRE,KWTMAX,KWTOT,                           REGROUP.26     
     %                   PEMINR,PEMAXR,PDTMIN,PFREQ,PFBIN,PTHETA,          REGROUP.27     
     %                   PEMIN,PMISS,df)                                   REGROUP.28     
C                                                                          REGROUP.29     
C**** *REGROUP* - ROUTINE TO REDUCE NUMBER OF WAVE TRAINS                  REGROUP.30     
C                                                                          REGROUP.31     
C     A.GUILLAUME      ECMWF                26/06/92                       REGROUP.32     
C     A.GUILLAUME      reduce memory space  09/02/94                       REGROUP.33     
C     M. HOLT          set pmiss for zero ht 20/2/96                       REGROUP.34     
C                                                                          REGROUP.35     
C     PURPOSE.                                                             REGROUP.36     
C     --------                                                             REGROUP.37     
C                                                                          REGROUP.38     
C          *REGROUP* REDUCES THE NB OF WT                                  REGROUP.39     
C                                                                          REGROUP.40     
C**   INTERFACE.                                                           REGROUP.41     
C     ----------                                                           REGROUP.42     
C                                                                          REGROUP.43     
C          *CALL* *REGROUP(PSPEC,KWTRA,PETO,PERIO,PDIR,KBLO,KJS,KJL,       REGROUP.44     
C                          KANG,KFRE,KWTMAX,KWTOT,                         REGROUP.45     
C                          PEMINR,PEMAXR,PDTMIN,PFREQ,PFBIN,PTHETA,        REGROUP.46     
C                          PEMIN,PMISS)                                    REGROUP.47     
C                                                                          REGROUP.48     
C       I       *PSPEC*   - WAVE SPECTRUM.                                 REGROUP.49     
C I/O   *KWTRA*   - WAVE TRAIN INDEX ASSOCIATED WITH EACH BIN OF PSPEC.    REGROUP.50     
C       I/O     *PETO*    - TOTAL ENERGY OF WAVE TRAINS.                   REGROUP.51     
C       I/O     *PERIO*   - MEAN PERIOD  OF WAVE TRAINS.                   REGROUP.52     
C       I/O     *PDIR*    - MEAN DIRECTION OF WAVE TRAINS.                 REGROUP.53     
C       I/      *KBLO*    - DIMENSION OF ONE BLOCK.                        REGROUP.54     
C       I/      *KJS*     - INDEX OF FIRST POINT OF BLOCK TO USE.          REGROUP.55     
C       I/      *KJL*     - INDEX OF LAST POINT OF BLOCK TO USE.           REGROUP.56     
C       I/      *KANG*    - NUMBER OF DIRECTIONS.                          REGROUP.57     
C       I/      *KFRE*    - NUMBER OF FREQUENCIES.                         REGROUP.58     
C       I/      *KWTMAX*  - MAX NUMBER OF WAVE TRAINS.                     REGROUP.59     
C        /O     *KWTOT*   - NUMBER OF WAVE TRAINS.                         REGROUP.60     
C       I/      *PEMINR*  - FOR MERGING WAVE TRAINS WITH CLOSE PERIODS     REGROUP.61     
C       I/      *PEMAXR*  - FOR MERGING WAVE TRAINS WITH CLOSE PERIODS     REGROUP.62     
C     I/      *PDTMIN*  - FOR MERGING WAVE TRAINS WITH CLOSE DIRECTIONS    REGROUP.63     
C       I/      *PFREQ*   - FREQUENCY MATRIX.                              REGROUP.64     
C       I/      *PFBIN*   - PFREQ(IF+1)=PFREQ(IF)*(1+PFBIN)                REGROUP.65     
C       I/      *PTHETA*  - DIRECTION MATRIX.                              REGROUP.66     
C       I/      *PEMIN*   - MIN ENERGY CUT-OFF                             REGROUP.67     
C       I/      *PMISS*   - MISSING VALUE                                  REGROUP.68     
C                                                                          REGROUP.69     
C     METHOD.                                                              REGROUP.70     
C     -------                                                              REGROUP.71     
C                                                                          REGROUP.72     
C                                                                          REGROUP.73     
C     EXTERNALS.                                                           REGROUP.74     
C     ----------                                                           REGROUP.75     
C          VTOTT                                                           REGROUP.76     
C          VAGDIRT                                                         REGROUP.77     
C                                                                          REGROUP.78     
C     REFERENCE.                                                           REGROUP.79     
C     ----------                                                           REGROUP.80     
C                                                                          REGROUP.81     
C          NONE.                                                           REGROUP.82     
C                                                                          REGROUP.83     
      DIMENSION PSPEC(KBLO,KANG,KFRE),KWTRA(KJL-KJS+1,KANG,KFRE)           REGROUP.84     
      DIMENSION PETO(KBLO,KWTMAX),PERIO(KBLO,KWTMAX),                      REGROUP.85     
     %          PDIR(KBLO,KWTMAX),KWTOT(KBLO),PEMIN(KBLO)                  REGROUP.86     
      DIMENSION PFREQ(KFRE),PTHETA(KANG),df(kfre)                          REGROUP.87     
C..WORKING ARRAYS:                                                         REGROUP.88     
      DIMENSION ZWORK(KJL-KJS+1,KANG,KFRE),ZPER(KBLO)                      REGROUP.89     
      DIMENSION ZTET1(KBLO),ZTET2(KBLO)                                    REGROUP.90     
C                                                                          REGROUP.91     
C*    *PARAMETER* OF GLOBAL CONSTANTS.                                     REGROUP.92     
C                                                                          REGROUP.93     
CCC   PARAMETER (G = 9.806, PI = 3.14159265358978, CIRC = 40000000.,       REGROUP.94     
CCC  1           ZPI = 2.*PI, RAD = PI/180., DEG = 180./PI,                REGROUP.95     
CCC  2           R = CIRC/ZPI)                                             REGROUP.96     
                                                                           REGROUP.97     
*CALL C_G                                                                  REGROUP.98     
*CALL C_PI                                                                 REGROUP.99     
                                                                           REGROUP.100    
C                                                                          REGROUP.101    
C..FUNCTION IN LINE                                                        REGROUP.102    
      IDELTA(I,J)=(ISIGN(1,I-J)+ISIGN(1,J-I))/2                            REGROUP.103    
                                                                           REGROUP.104    
         ZPI=2.*PI                                                         REGROUP.105    
         RAD=PI_OVER_180                                                   REGROUP.106    
         DEG=RECIP_PI_OVER_180                                             REGROUP.107    
                                                                           REGROUP.108    
C                                                                          REGROUP.109    
C          1. MERGING LOOP.                                                REGROUP.110    
C             -------------                                                REGROUP.111    
C                                                                          REGROUP.112    
ccc   WRITE(6,*)'in routine     regroup array pfreq   kfre'                GIE0F403.592    
ccc   WRITE(6,*)kfre,pfreq                                                 GIE0F403.593    
100   CONTINUE                                                             REGROUP.115    
      DO 101 JWTR=KWTMAX,1,-1                                              REGROUP.116    
      DO 101 JWTR2=JWTR-1,1,-1                                             REGROUP.117    
      DO 102 J=KJS,KJL                                                     REGROUP.118    
      ZPER(J)=PERIO(J,JWTR2)/PERIO(J,JWTR)                                 REGROUP.119    
      ZTET1(J)=MOD(PDIR(J,JWTR)-PDIR(J,JWTR2)+ZPI,ZPI)                     REGROUP.120    
      ZTET2(J)=MOD(PDIR(J,JWTR2)-PDIR(J,JWTR)+ZPI,ZPI)                     REGROUP.121    
      ZTET1(J)=AMIN1(ABS(ZTET1(J)),ABS(ZTET2(J)))                          REGROUP.122    
102   CONTINUE                                                             REGROUP.123    
C                                                                          REGROUP.124    
C          1.1 REGROUPEMENT PAR PERIODE ET PAR DIRECTION.                  REGROUP.125    
C              ------------------------------------------                  REGROUP.126    
C                                                                          REGROUP.127    
110   CONTINUE                                                             REGROUP.128    
      DO 111 J=KJS,KJL                                                     REGROUP.129    
CAG   WRITE(6,*)'J IN REGROUP ',J,' JWTR,JWTR2 ',JWTR,JWTR2                GIE0F403.594    
CAG   WRITE(6,*)' ZTET1(J),ZTET2(J),ZPER(J) ',                             GIE0F403.595    
CAG  %       ZTET1(J),ZTET2(J),ZPER(J)                                     REGROUP.132    
CAG   PRINT 115,KWTRA                                                      REGROUP.133    
115   FORMAT('KWTRA IN REGROUP',(24I2))                                    REGROUP.134    
      IF((ZPER(J).LT.PEMAXR).AND.(ZPER(J).GT.PEMINR)) THEN                 REGROUP.135    
         IF(ZTET1(J).LT.PDTMIN) THEN                                       REGROUP.136    
            DO 112 JFRE=1,KFRE                                             REGROUP.137    
            DO 112 JANG=1,KANG                                             REGROUP.138    
               KWTRA(J-KJS+1,JANG,JFRE)=                                   REGROUP.139    
     %            JWTR2*IDELTA(KWTRA(J-KJS+1,JANG,JFRE),JWTR)              REGROUP.140    
     %           +KWTRA(J-KJS+1,JANG,JFRE)                                 REGROUP.141    
     %            *(1-IDELTA(KWTRA(J-KJS+1,JANG,JFRE),JWTR))               REGROUP.142    
112         CONTINUE                                                       REGROUP.143    
            PETO(J,JWTR)=0.                                                REGROUP.144    
            PERIO(J,JWTR)=PMISS                                            REGROUP.145    
            PDIR(J,JWTR)=PMISS                                             REGROUP.146    
         ENDIF                                                             REGROUP.147    
      ENDIF                                                                REGROUP.148    
111   CONTINUE                                                             REGROUP.149    
C                                                                          REGROUP.150    
C          1.2. COMPUTE INTEGRATED PARAMETERS OF NEW WAVE TRAIN.           REGROUP.151    
C               -----------------------------------------------            REGROUP.152    
C                                                                          REGROUP.153    
120   CONTINUE                                                             REGROUP.154    
      DO 123 JFRE=1,KFRE                                                   REGROUP.155    
      DO 123 JANG=1,KANG                                                   REGROUP.156    
      DO 123 J=1,KJL-KJS+1                                                 REGROUP.157    
      ZWORK(J,JANG,JFRE)=                                                  REGROUP.158    
     %PSPEC(J+KJS-1,JANG,JFRE)*IDELTA(KWTRA(J,JANG,JFRE),JWTR2)            REGROUP.159    
123   CONTINUE                                                             REGROUP.160    
      CALL VINTPAR(ZWORK,PETO(KJS,JWTR2),PERIO(KJS,JWTR2),                 REGROUP.161    
     %             PDIR(KJS,JWTR2),KJL-KJS+1,1,KJL-KJS+1,KANG,KFRE,        REGROUP.162    
     %             PFREQ,PFBIN,PTHETA,PMISS,df)                            REGROUP.163    
101   CONTINUE                                                             REGROUP.164    
CAG   WRITE(6,*)' NB TRAINS AVANT REGROUPEMENT ',KWTOT                     GIE0F403.596    
C                                                                          REGROUP.166    
C          2. COUNT AND REORGANIZE WAVE TRAINS.                            REGROUP.167    
C             ---------------------------------                            REGROUP.168    
C                                                                          REGROUP.169    
200   CONTINUE                                                             REGROUP.170    
      DO 201 J=KJS,KJL                                                     REGROUP.171    
      KWTOT(J)=0                                                           REGROUP.172    
201   CONTINUE                                                             REGROUP.173    
      DO 202 J=KJS,KJL                                                     REGROUP.174    
      DO 203 JWTR=1,KWTMAX                                                 REGROUP.175    
CCMH   * note that pemin is proportion of total energy so                  REGROUP.176    
CCMH   * if ice point we have                                              REGROUP.177    
CCMH   * total energy is 2pi*emin or zero ? so the pemin test is passed    REGROUP.178    
      IF((PETO(J,JWTR).NE.PMISS)                                           REGROUP.179    
     %   .AND.(PETO(J,JWTR).GT.1.e-2)                                      REGROUP.180    
     %   .AND.(PETO(J,JWTR).GT.PEMIN(J))) THEN                             REGROUP.181    
         KWTOT(J)=KWTOT(J)+1                                               REGROUP.182    
         PETO(J,KWTOT(J))=PETO(J,JWTR)                                     REGROUP.183    
         PDIR(J,KWTOT(J))=PDIR(J,JWTR)                                     REGROUP.184    
         PERIO(J,KWTOT(J))=PERIO(J,JWTR)                                   REGROUP.185    
         DO 204 JFRE=1,KFRE                                                REGROUP.186    
         DO 204 JANG=1,KANG                                                REGROUP.187    
         KWTRA(J-KJS+1,JANG,JFRE)=                                         REGROUP.188    
     %   KWTOT(J)*IDELTA(KWTRA(J-KJS+1,JANG,JFRE),JWTR)                    REGROUP.189    
     %   +KWTRA(J-KJS+1,JANG,JFRE)                                         REGROUP.190    
     %   *(1-IDELTA(KWTRA(J-KJS+1,JANG,JFRE),JWTR))                        REGROUP.191    
204      CONTINUE                                                          REGROUP.192    
      ELSE                                                                 REGROUP.193    
         PETO(J,JWTR)=0.                                                   REGROUP.194    
         PDIR(J,JWTR)=PMISS                                                REGROUP.195    
         PERIO(J,JWTR)=PMISS                                               REGROUP.196    
         DO 205 JFRE=1,KFRE                                                REGROUP.197    
         DO 205 JANG=1,KANG                                                REGROUP.198    
         KWTRA(J-KJS+1,JANG,JFRE)=                                         REGROUP.199    
     %   (KWTMAX+1)*IDELTA(KWTRA(J-KJS+1,JANG,JFRE),JWTR)                  REGROUP.200    
     %   +KWTRA(J-KJS+1,JANG,JFRE)                                         REGROUP.201    
     %   *(1-IDELTA(KWTRA(J-KJS+1,JANG,JFRE),JWTR))                        REGROUP.202    
205      CONTINUE                                                          REGROUP.203    
      ENDIF                                                                REGROUP.204    
203   CONTINUE                                                             REGROUP.205    
      DO 206 JWTR=KWTOT(J)+1,KWTMAX                                        REGROUP.206    
      PETO(J,JWTR)=0.                                                      REGROUP.207    
      PDIR(J,JWTR)=PMISS                                                   REGROUP.208    
      PERIO(J,JWTR)=PMISS                                                  REGROUP.209    
206   CONTINUE                                                             REGROUP.210    
202   CONTINUE                                                             REGROUP.211    
CAG   WRITE(6,*)' NB TRAINS APRES REGROUPEMENT ',KWTOT                     GIE0F403.597    
      RETURN                                                               REGROUP.213    
      END                                                                  REGROUP.214    
*ENDIF                                                                     REGROUP.215