*IF DEF,W08_1A                                                             GLW1F404.59     
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.15915  
C                                                                          GTS2F400.15916  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.15917  
C restrictions as set forth in the contract.                               GTS2F400.15918  
C                                                                          GTS2F400.15919  
C                Meteorological Office                                     GTS2F400.15920  
C                London Road                                               GTS2F400.15921  
C                BRACKNELL                                                 GTS2F400.15922  
C                Berkshire UK                                              GTS2F400.15923  
C                RG12 2SZ                                                  GTS2F400.15924  
C                                                                          GTS2F400.15925  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.15926  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.15927  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.15928  
C Modelling at the above address.                                          GTS2F400.15929  
C ******************************COPYRIGHT******************************    GTS2F400.15930  
C                                                                          GTS2F400.15931  
                                                                           WV_CHECK.3      

      SUBROUTINE CHECK (IREFRA, ML, KL, IINPC,                              1,2WV_CHECK.4      
*CALL ARGWVAL                                                              WV_CHECK.5      
*CALL ARGWVGD                                                              WV_CHECK.6      
*CALL ARGWVMP                                                              WV_CHECK.7      
     & icode)                                                              WV_CHECK.8      
                                                                           WV_CHECK.9      
*CALL PARCONS                                                              WV_CHECK.10     
C include parwvsh as value of ndepth is printed out                        WV_CHECK.11     
*CALL PARWVSH                                                              WV_CHECK.12     
                                                                           WV_CHECK.13     
*CALL TYPWVGD                                                              WV_CHECK.14     
*CALL TYPWVMP                                                              WV_CHECK.15     
*CALL TYPWVAL                                                              WV_CHECK.16     
                                                                           WV_CHECK.17     
C need calls to ARGWVSH because a value for ndepth is printed              WV_CHECK.18     
C ----------------------------------------------------------------------   WV_CHECK.19     
C                                                                          WV_CHECK.20     
C**** *CHECK* - ROUTINE TO CHECK CONSISTENCY BETWEEN COMPUTED BLOCKS.      WV_CHECK.21     
C                                                                          WV_CHECK.22     
C     H.GUNTHER            ECMWF       04/04/1990                          WV_CHECK.23     
C                                                                          WV_CHECK.24     
C*    PURPOSE.                                                             WV_CHECK.25     
C     -------                                                              WV_CHECK.26     
C                                                                          WV_CHECK.27     
C       *CHECK* CHECKS CONSISTENCY BETWEEN BLOCK INDICES.                  WV_CHECK.28     
C                                                                          WV_CHECK.29     
C**   INTERFACE.                                                           WV_CHECK.30     
C     ----------                                                           WV_CHECK.31     
C                                                                          WV_CHECK.32     
C       *CALL* *CHECK (IREFRA, ML, KL, IINPC)*                             WV_CHECK.33     
C          *IREFRA*  - REFRACTION OPTION.                                  WV_CHECK.34     
C          *ML*      - NUMBER OF FREQUENCIES.                              WV_CHECK.35     
C          *KL*      - NUMBER OF DIRECTIONS.                               WV_CHECK.36     
C          *IINPC*   - NUMBER INPUT POINTS FROM A PREVIOUS COARSE GRID.    WV_CHECK.37     
C                                                                          WV_CHECK.38     
C     METHOD.                                                              WV_CHECK.39     
C     -------                                                              WV_CHECK.40     
C                                                                          WV_CHECK.41     
C       NONE.                                                              WV_CHECK.42     
C                                                                          WV_CHECK.43     
C     EXTERNALS.                                                           WV_CHECK.44     
C     ----------                                                           WV_CHECK.45     
C                                                                          WV_CHECK.46     
C       *ABORT*     - TERMINATES PROCESSING.                               WV_CHECK.47     
C       *OUTPP*     - WRITE OUT A GRID.                                    WV_CHECK.48     
C                                                                          WV_CHECK.49     
C     REFERENCE.                                                           WV_CHECK.50     
C     ----------                                                           WV_CHECK.51     
C                                                                          WV_CHECK.52     
C       NONE.                                                              WV_CHECK.53     
C                                                                          WV_CHECK.54     
C ----------------------------------------------------------------------   WV_CHECK.55     
C                                                                          WV_CHECK.56     
      CHARACTER*1 LST(NGX,NGY)                                             WV_CHECK.57     
      DIMENSION GRID(NGX,NGY)                                              WV_CHECK.58     
C                                                                          WV_CHECK.59     
C*     VARIABLE.   TYPE.     PURPOSE.                                      WV_CHECK.60     
C      ---------   -------   --------                                      WV_CHECK.61     
C      *LSTAB*     CHARACTER  LAND SEA TABLE  L = LAND                     WV_CHECK.62     
C                                             S = SEA                      WV_CHECK.63     
C                                             + = SEA AND OUTPUT POINT.    WV_CHECK.64     
C      *GRID*      REAL       ARRAY FOR GRIDDED PRINT OUTPUT.              WV_CHECK.65     
C                                                                          WV_CHECK.66     
C ----------------------------------------------------------------------   WV_CHECK.67     
C                                                                          WV_CHECK.68     
C*    1. COMPARE LENGTH OF OVERLAPPING LAT.                                WV_CHECK.69     
C        -----------------------------------                               WV_CHECK.70     
C                                                                          WV_CHECK.71     
      iu06=6                                                               WV_CHECK.72     
 1000 CONTINUE                                                             WV_CHECK.73     
      DO 1001 IG=1,IGL-1                                                   WV_CHECK.74     
         IU1 = IJS(IG+1)-1                                                 WV_CHECK.75     
         IO2 = IJL(IG)-IJLS(IG)+1                                          WV_CHECK.76     
         IF (IU1.NE.IO2) THEN                                              WV_CHECK.77     
            WRITE (IU06,*) ' *****************************************'    WV_CHECK.78     
            WRITE (IU06,*) ' *                                       *'    WV_CHECK.79     
            WRITE (IU06,*) ' *      FATAL ERROR IN SUB. CHECK        *'    WV_CHECK.80     
            WRITE (IU06,*) ' *      =========================        *'    WV_CHECK.81     
            WRITE (IU06,*) ' *                                       *'    WV_CHECK.82     
            WRITE (IU06,*) ' * LENGTH OF FIRST LAT. IN BLOCK IG+1    *'    WV_CHECK.83     
            WRITE (IU06,*) ' * IS NOT EQUAL TO SECOND TO LAST OF     *'    WV_CHECK.84     
            WRITE (IU06,*) ' * BLOCK IG                              *'    WV_CHECK.85     
            WRITE (IU06,*) ' * BLOCK  NUMBER IS IG = ', IG                 WV_CHECK.86     
            WRITE (IU06,*) ' * LENGTH IN BLOCK IG   IS IU1 = ', IU1        WV_CHECK.87     
            WRITE (IU06,*) ' * LENGTH IN BLOCK IG+1 IS IO2 = ', IO2        WV_CHECK.88     
            WRITE (IU06,*) ' *                                       *'    WV_CHECK.89     
            WRITE (IU06,*) ' *****************************************'    WV_CHECK.90     
                                                                           WV_CHECK.91     
            icode=-1                                                       WV_CHECK.92     
            call abort                                                     WV_CHECK.93     
         ENDIF                                                             WV_CHECK.94     
         IU2 = IJL2(IG+1)-IJS(IG+1)+1                                      WV_CHECK.95     
         IO1 = IJLT(IG)-IJL(IG)                                            WV_CHECK.96     
         IF (IU2.NE.IO1) THEN                                              WV_CHECK.97     
            WRITE (IU06,*) ' *****************************************'    WV_CHECK.98     
            WRITE (IU06,*) ' *                                       *'    WV_CHECK.99     
            WRITE (IU06,*) ' *      FATAL ERROR IN SUB. CHECK        *'    WV_CHECK.100    
            WRITE (IU06,*) ' *      =========================        *'    WV_CHECK.101    
            WRITE (IU06,*) ' *                                       *'    WV_CHECK.102    
            WRITE (IU06,*) ' * LENGTH OF SECOND LAT. IN BLOCK IG+1   *'    WV_CHECK.103    
            WRITE (IU06,*) ' * IS NOT EQUAL TO LAST OF BLOCK IG      *'    WV_CHECK.104    
            WRITE (IU06,*) ' * BLOCK  NUMBER IS IG = ', IG                 WV_CHECK.105    
            WRITE (IU06,*) ' * LENGTH IN BLOCK IG   IS IU2 = ', IU2        WV_CHECK.106    
            WRITE (IU06,*) ' * LENGTH IN BLOCK IG+1 IS IO1 = ', IO1        WV_CHECK.107    
            WRITE (IU06,*) ' *                                       *'    WV_CHECK.108    
            WRITE (IU06,*) ' *****************************************'    WV_CHECK.109    
            icode=-1                                                       WV_CHECK.110    
            call abort                                                     WV_CHECK.111    
         ENDIF                                                             WV_CHECK.112    
 1001 CONTINUE                                                             WV_CHECK.113    
C                                                                          WV_CHECK.114    
C ----------------------------------------------------------------------   WV_CHECK.115    
C                                                                          WV_CHECK.116    
C*    2. GENERATE LAND SEA TABLE FROM INDEX ARRAYS.                        WV_CHECK.117    
C        ------------------------------------------                        WV_CHECK.118    
C                                                                          WV_CHECK.119    
 2000 CONTINUE                                                             WV_CHECK.120    
      DO 2001 K=1,NY                                                       WV_CHECK.121    
      DO 2001 I=1,NX                                                       WV_CHECK.122    
         LST(I,K) = 'L'                                                    WV_CHECK.123    
 2001 CONTINUE                                                             WV_CHECK.124    
                                                                           WV_CHECK.125    
      IERR = 0                                                             WV_CHECK.126    
      DO 2002 IG=1,IGL                                                     WV_CHECK.127    
         DO 2003 IJ=IJS(IG),IJL(IG)                                        WV_CHECK.128    
            IF (IXLG(IJ,IG).NE.0.OR.KXLT(IJ,IG).NE.0)                      WV_CHECK.129    
     1          LST(IXLG(IJ,IG),KXLT(IJ,IG)) = 'S'                         WV_CHECK.130    
 2003    CONTINUE                                                          WV_CHECK.131    
 2002 CONTINUE                                                             WV_CHECK.132    
C                                                                          WV_CHECK.133    
C*    2.4 PRINT LAND SEA MAP.                                              WV_CHECK.134    
C         -------------------                                              WV_CHECK.135    
C                                                                          WV_CHECK.136    
 2400 CONTINUE                                                             WV_CHECK.137    
      ILEN = 120                                                           WV_CHECK.138    
      IPAGE = (NX+ILEN-1)/ILEN                                             WV_CHECK.139    
      IF (IPAGE.GT.1) THEN                                                 WV_CHECK.140    
         LAST = (NX-ILEN*(IPAGE-1)+IPAGE-2)/(IPAGE-1)                      WV_CHECK.141    
         IF (LAST.LE.10) THEN                                              WV_CHECK.142    
            ILEN = ILEN + 10                                               WV_CHECK.143    
            IPAGE = (NX+ILEN-1)/ILEN                                       WV_CHECK.144    
         ENDIF                                                             WV_CHECK.145    
      ENDIF                                                                WV_CHECK.146    
      DO 2401 L=1,IPAGE                                                    WV_CHECK.147    
         IA = (L-1)*ILEN                                                   WV_CHECK.148    
         IE = MIN(IA+ILEN,NX)                                              WV_CHECK.149    
         IA = IA + 1                                                       WV_CHECK.150    
         BMOWEP = AMOWEP +REAL(IA-1)*XDELLO                                WV_CHECK.151    
         BMOEAP = AMOWEP +REAL(IE-1)*XDELLO                                WV_CHECK.152    
         WRITE (IU06,'(1H1,'' LAND SEA MAP OF FULL GRID '',                WV_CHECK.153    
     1               ''   L = LAND  S = SEA '',                            WV_CHECK.154    
     2               ''                PAGE: '',I2)') L                    WV_CHECK.155    
         WRITE (IU06,'(2X,''LONGITUDE IS FROM '',F7.2,'' TO '',F7.2)')     WV_CHECK.156    
     1              BMOWEP, BMOEAP                                         WV_CHECK.157    
         WRITE (IU06,'(2X,''LATITUDE  IS FROM '',F7.2,'' TO '',F7.2)')     WV_CHECK.158    
     1              AMONOP, AMOSOP                                         WV_CHECK.159    
         WRITE (IU06,'(2X,130I1)') (MOD(I,10),I=IA,IE)                     WV_CHECK.160    
         DO 2402 K=NY,1,-1                                                 WV_CHECK.161    
            WRITE (IU06,'(1X,I1,130A1)') MOD(K,10),(LST(I,K),I=IA,IE)      WV_CHECK.162    
 2402    CONTINUE                                                          WV_CHECK.163    
         WRITE (IU06,'(2X,130I1)') (MOD(I,10),I=IA,IE)                     WV_CHECK.164    
 2401 CONTINUE                                                             WV_CHECK.165    
C                                                                          WV_CHECK.166    
C ----------------------------------------------------------------------   WV_CHECK.167    
C                                                                          WV_CHECK.168    
C*    5. OUTPUT OF OVERALL GRID INFORMATION.                               WV_CHECK.169    
C        -----------------------------------                               WV_CHECK.170    
C                                                                          WV_CHECK.171    
 5000 CONTINUE                                                             WV_CHECK.172    
ccmh  WRITE (IU06,'(1H1,'' GRID SUMMERY:'')')                              WV_CHECK.173    
      WRITE (IU06,'(1H1,'' GRID SUMMARY:'')')                              WV_CHECK.174    
      WRITE (IU06,*) ' NUMBER OF BLOCKS GENERATED IS IGL ....: ', IGL      WV_CHECK.175    
      IJFLAT = 0                                                           WV_CHECK.176    
      IJLLAT = 0                                                           WV_CHECK.177    
      IJMAX = 0                                                            WV_CHECK.178    
      ISEA = 0                                                             WV_CHECK.179    
      IPOI = 0                                                             WV_CHECK.180    
      DO 5001 IG=1,IGL                                                     WV_CHECK.181    
         IJFLAT= MAX(IJFLAT,IJS(IG)-1)                                     WV_CHECK.182    
         IJLLAT= MAX(IJLLAT,IJLT(IG)-IJL(IG))                              WV_CHECK.183    
         IJMAX = MAX(IJMAX,IJLT(IG))                                       WV_CHECK.184    
         IPOI  = IPOI + IJLT(IG)                                           WV_CHECK.185    
         ISEA  = ISEA + IJL(IG)-IJS(IG) + 1                                WV_CHECK.186    
 5001 CONTINUE                                                             WV_CHECK.187    
      IOV = IPOI-ISEA                                                      WV_CHECK.188    
      WRITE (IU06,*) ' MAXIMUM NUMBER OF POINTS IN A BLOCK ..: ', IJMAX    WV_CHECK.189    
      WRITE (IU06,*) ' TOTAL NUMBER OF POINT IN ALL BLOCKS ..: ', IPOI     WV_CHECK.190    
      WRITE (IU06,*) ' TOTAL NUMBER OF SEA POINTS ...........: ', ISEA     WV_CHECK.191    
      WRITE (IU06,*) ' TOTAL NUMBER OF POINTS IN OVERLAP.....: ', IOV      WV_CHECK.192    
      WRITE (IU06,*) ' MAXIMUM LENGTH OF FIRST LAT OF A BLOCK: ', IJFLAT   WV_CHECK.193    
      WRITE (IU06,*) ' MAXIMUM LENGTH OF LAST  LAT OF A BLOCK: ', IJLLAT   WV_CHECK.194    
C                                                                          WV_CHECK.195    
C ----------------------------------------------------------------------   WV_CHECK.196    
      NIBLC = 1                                                            WVV0F401.40     
      NIBLD = NIBLO                                                        WVV0F401.41     
      NBLC = 1                                                             WVV0F401.42     
      NBLD = NBLO                                                          WVV0F401.43     
C                                                                          WV_CHECK.197    
C*    6. OUTPUT OF OPTIMAL DIMENSIONS.                                     WV_CHECK.198    
C        -----------------------------                                     WV_CHECK.199    
C                                                                          WV_CHECK.200    
 6000 CONTINUE                                                             WV_CHECK.201    
      WRITE (IU06,'(//,'' DIMENSIONS OF ARRAYS, WHICH ARE USED'',          WV_CHECK.202    
     1             '' IN PRESET AND CHIEF '',/)')                          WV_CHECK.203    
      WRITE (IU06,'(''                                     DEFINED'',      WV_CHECK.204    
     1           ''      USED'',''  REQUIRED'')')                          WV_CHECK.205    
      WRITE (IU06,'('' NUMBER OF DIRECTIONS        NANG '', 3I10)')        PXWVCK.1      
     1           NANG, KL, KL                                              WV_CHECK.207    
      WRITE (IU06,'('' NUMBER OF FREQUENCIES       NFRE '', 3I10)')        PXWVCK.2      
     1           NFRE, ML, ML                                              WV_CHECK.209    
      WRITE (IU06,'('' NUMBER LONGITUDE GRID POINTS NGX '', 3I10)')        WV_CHECK.210    
     1           NGX, NX, NX                                               WV_CHECK.211    
      WRITE (IU06,'('' NUMBER LATITUDE GRID POINTS  NGY '', 3I10)')        WV_CHECK.212    
     1           NGY, NY, NY                                               WV_CHECK.213    
      WRITE (IU06,'('' NUMBER OF BLOCKS            NBLO '', 3I10)')        WV_CHECK.214    
     1           NBLO, IGL, NBLO                                           WV_CHECK.215    
      WRITE (IU06,'('' MAXIMUM BLOCK LENGTH       NIBLO '', 3I10)')        WV_CHECK.216    
     1           NIBLO, IJMAX, NIBLO                                       WV_CHECK.217    
      WRITE (IU06,'('' NUMBER POINTS IN FIRST LAT NOVER '', 3I10)')        WV_CHECK.218    
     1           NOVER, MAX(1,IJFLAT), MAX(1,IJFLAT)                       WV_CHECK.219    
      IF (IREFRA.EQ.0) THEN                                                WV_CHECK.220    
         WRITE (IU06,'('' DEPTH REFRAC. BLOCK LENGTH NIBLD '', 3I10)')     WV_CHECK.221    
     1           NIBLD, 1, 1                                               WV_CHECK.222    
         WRITE (IU06,'('' DEPTH REFRAC. BLOCK NUMBER  NBLD '', 3I10)')     WV_CHECK.223    
     1           NBLD, 1, 1                                                WV_CHECK.224    
         WRITE (IU06,'('' CURR. REFRAC. BLOCK LENGTH NIBLC '', 3I10)')     WV_CHECK.225    
     1           NIBLC, 1, 1                                               WV_CHECK.226    
         WRITE (IU06,'('' CURR. REFRAC. BLOCK NUMBER  NBLC '', 3I10)')     WV_CHECK.227    
     1           NBLC, 1, 1                                                WV_CHECK.228    
      ELSE IF (IREFRA.EQ.1) THEN                                           WV_CHECK.229    
         WRITE (IU06,'('' DEPTH REFRAC. BLOCK LENGTH NIBLD '', 3I10)')     WV_CHECK.230    
     1           NIBLD, IJMAX, NIBLO                                       WV_CHECK.231    
         WRITE (IU06,'('' DEPTH REFRAC. BLOCK NUMBER  NBLD '', 3I10)')     WV_CHECK.232    
     1           NBLD, IGL, NBLO                                           WV_CHECK.233    
         WRITE (IU06,'('' CURR. REFRAC. BLOCK LENGTH NIBLC '', 3I10)')     WV_CHECK.234    
     1           NIBLC, 1, 1                                               WV_CHECK.235    
         WRITE (IU06,'('' CURR. REFRAC. BLOCK NUMBER  NBLC '', 3I10)')     WV_CHECK.236    
     1           NBLC, 1, 1                                                WV_CHECK.237    
      ELSE IF (IREFRA.EQ.2) THEN                                           WV_CHECK.238    
         WRITE (IU06,'('' DEPTH REFRAC. BLOCK LENGTH NIBLD '', 3I10)')     WV_CHECK.239    
     1           NIBLD, IJMAX, NIBLO                                       WV_CHECK.240    
         WRITE (IU06,'('' DEPTH REFRAC. BLOCK NUMBER  NBLD '', 3I10)')     WV_CHECK.241    
     1           NBLD, IGL, NBLO                                           WV_CHECK.242    
         WRITE (IU06,'('' CURR. REFRAC. BLOCK LENGTH NIBLC '', 3I10)')     WV_CHECK.243    
     1           NIBLC, IJMAX, NIBLO                                       WV_CHECK.244    
         WRITE (IU06,'('' CURR. REFRAC. BLOCK NUMBER  NBLC '', 3I10)')     WV_CHECK.245    
     1           NBLC, IGL, NBLO                                           WV_CHECK.246    
      ENDIF                                                                WV_CHECK.247    
                                                                           WV_CHECK.248    
      WRITE (IU06,'('' SHALLOW WATER TABLE LEN.  NDEPTH '', 3I10)')        WV_CHECK.249    
     1           NDEPTH, NDEPTH, NDEPTH                                    WV_CHECK.250    
                                                                           WV_CHECK.251    
      WRITE (IU06,'(/,'' THE DIMENSIONS IN PRESET AND CHIEF HAVE TO '',    WV_CHECK.252    
     1             '' BE THE VALUES IN COLUMN - REQUIRED - '')')           WV_CHECK.253    
      WRITE (IU06,'(  '' IF YOU WANT TO USE THE OPTIMAL DIMENSION'',       WV_CHECK.254    
     1             '' LENGTH IN THE WAMODEL, THEN  '',/,                   WV_CHECK.255    
     2             '' RERUN PREPROC WITH THE DIMENSION'',                  WV_CHECK.256    
     3             '' GIVEN AS -USED-'')')                                 WV_CHECK.257    
                                                                           WV_CHECK.258    
      RETURN                                                               WV_CHECK.259    
      END                                                                  WV_CHECK.260    
*ENDIF                                                                     WV_CHECK.261