*IF DEF,W08_1A                                                             GLW1F404.52     
C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved.    GTS2F400.15864  
C                                                                          GTS2F400.15865  
C Use, duplication or disclosure of this code is subject to the            GTS2F400.15866  
C restrictions as set forth in the contract.                               GTS2F400.15867  
C                                                                          GTS2F400.15868  
C                Meteorological Office                                     GTS2F400.15869  
C                London Road                                               GTS2F400.15870  
C                BRACKNELL                                                 GTS2F400.15871  
C                Berkshire UK                                              GTS2F400.15872  
C                RG12 2SZ                                                  GTS2F400.15873  
C                                                                          GTS2F400.15874  
C If no contract has been raised with this copy of the code, the use,      GTS2F400.15875  
C duplication or disclosure of it is strictly prohibited.  Permission      GTS2F400.15876  
C to do so must first be obtained in writing from the Head of Numerical    GTS2F400.15877  
C Modelling at the above address.                                          GTS2F400.15878  
C ******************************COPYRIGHT******************************    GTS2F400.15879  
C                                                                          GTS2F400.15880  
                                                                           SETUPWV.3      

      subroutine SETUPWV(ia1,ml,kl,irefra,ishallo,                         ,8SETUPWV.4      
*CALL ARGWVAL                                                              SETUPWV.5      
*CALL ARGWVMP                                                              SETUPWV.6      
*CALL ARGWVGD                                                              SETUPWV.7      
*CALL ARGWVFD                                                              SETUPWV.8      
*CALL ARGWVNL                                                              SETUPWV.9      
*CALL ARGWVSH                                                              SETUPWV.10     
*CALL ARGWVCP                                                              SETUPWV.11     
*CALL ARGWVTB                                                              SETUPWV.12     
*CALL ARGWVCU                                                              SETUPWV.13     
*CALL ARGWVRF                                                              SETUPWV.14     
*CALL ARGWVKL                                                              SETUPWV.16     
     & icode)                                                              SETUPWV.17     
                                                                           SETUPWV.18     
*CALL PARCONS                                                              SETUPWV.19     
*CALL PARWVSH                                                              SETUPWV.20     
*CALL PARWVTB                                                              SETUPWV.21     
                                                                           SETUPWV.22     
*CALL TYPWVMP                                                              SETUPWV.23     
*CALL TYPWVGD                                                              SETUPWV.24     
*CALL TYPWVFD                                                              SETUPWV.25     
*CALL TYPWVNL                                                              SETUPWV.26     
*CALL TYPWVSH                                                              SETUPWV.27     
*CALL TYPWVCP                                                              SETUPWV.28     
*CALL TYPWVTB                                                              SETUPWV.29     
*CALL TYPWVCU                                                              SETUPWV.30     
*CALL TYPWVRF                                                              SETUPWV.31     
*CALL TYPWVSR                                                              SETUPWV.32     
*CALL TYPWVKL                                                              SETUPWV.33     
*CALL TYPWVAL                                                              SETUPWV.34     
                                                                           SETUPWV.35     
        logical ia1(ngx,ngy)   ! in land-sea mask land=T                   WVV0F401.16     
                                                                           SETUPWV.37     
C ----------------------------------------------------------------------   SETUPWV.38     
C   based on program preproc of WAM cycle 4                                SETUPWV.39     
C   version 1.0   M Holt 3/5/95                                            SETUPWV.40     
C                                                                          SETUPWV.41     
C**** *PROGRAM PREPROC* - PREPARE DATA (BUT NOT WINDS) FOR INPUT           SETUPWV.42     
C                         TO WAM WAVE MODELS.                              SETUPWV.43     
C                                                                          SETUPWV.44     
C*    PURPOSE.                                                             SETUPWV.45     
C     --------                                                             SETUPWV.46     
C                                                                          SETUPWV.47     
C       TO ARRANGE A GRID FOR THE WAM WAVE MODEL AND COMPUTE               SETUPWV.48     
C       ALL FIXED MODEL PARAMETERS WHICH ARE STORED IN DIFFERENT           SETUPWV.49     
C       COMMON BLOCKS.                                                     SETUPWV.50     
C                                                                          SETUPWV.51     
C     METHOD.                                                              SETUPWV.52     
C     -------                                                              SETUPWV.53     
C                                                                          SETUPWV.54     
C       [A REPRESENTATIVE TOPOGRAPHIC DATA SET ON LAT-LONG                 SETUPWV.55     
C       COORDINATES CONTAINING THE MODEL SQUARE BOX REGION IS              SETUPWV.56     
C       READ IN.]                                                          SETUPWV.57     
C                                                                          SETUPWV.58     
C       [THE MODEL REGION IS EXTRACTED AND INTERPOLATED                    SETUPWV.59     
C       ONTO GIVEN LAT-LONG GRID INCREMENTS (SEE SUB TOPOAR).              SETUPWV.60     
C       THE PROGRAM CHECKS FOR A PERIODIC LATITUDE GRID. IF THE            SETUPWV.61     
C       GRID IS NOT PERIODIC A CLOSED BASIN IS ASSUMED.                    SETUPWV.62     
C       THE PROGRAM DOES NOT DISTINGUISH BETWEEN DEEP AND SHALLOW          SETUPWV.63     
C       WATER.]                                                            SETUPWV.64     
C                                                                          SETUPWV.65     
C   UM - grid details read in from model dump are formatted into blocks    SETUPWV.66     
C                                                                          SETUPWV.67     
C       -BLOCK STRUCTURE :                                                 SETUPWV.68     
C        GRID POINTS ARE COLLECTED INTO A 1-DIMENSIONAL ARRAY,             SETUPWV.69     
C        BLOCKS OF MAXIMALLY NIBLO ELEMENTS,  GRID POINTS                  SETUPWV.70     
C        (ONLY SEAPOINTS) ARE COUNTED ALONG LINES OF LATITUDES             SETUPWV.71     
C        FROM WEST TO EAST WORKING FROM SOUTH TO NORTH.                    SETUPWV.72     
C        BLOCKS OVERLAP OVER TWO LATITUDE LINES,TO COMPUTE NORTH           SETUPWV.73     
C        -SOUTH ADVECTION TERMS.                                           SETUPWV.74     
C                                                                          SETUPWV.75     
C       -NESTED GRIDS: THE GRID GENERATED CAN BE A                         SETUPWV.76     
C         - COARSE GRID WHICH MEANS OUTPUT OF SPECTRA                      SETUPWV.77     
C                       FOR A FOLLOW UP FINE GRID RUN.                     SETUPWV.78     
C         - FINE   GRID WHICH MEANS INPUT OF SPECTRA                       SETUPWV.79     
C                       FROM  AN EARLIER COARSE GRID RUN.                  SETUPWV.80     
C         - COARSE AND FINE GRID                                           SETUPWV.81     
C                                                                          SETUPWV.82     
C       - REFRACTION: CONTROLLED BY THE REFRACTION OPTION                  SETUPWV.83     
C         A CURRENT FIELD IS READ, INTERPOLATED TO THE MODEL               SETUPWV.84     
C         GRID AND STORED IN THE GRID OUTPUT FILE.                         SETUPWV.85     
C                                                                          SETUPWV.86     
C       - PARAMETERS FOR ARRAY DIMENSIONS: THE PRORAM CHECKS               SETUPWV.87     
C         ALL DIMENSIONS INTERNALLY. ONLY THE BLOCK LENGTH                 SETUPWV.88     
C         (NIBLO) IS USED FOR THE SET UP OF THE GRID, ALL                  SETUPWV.89     
C         THE OTHER PARAMETERS HAVE TO BE LARGE ENOUGH TO                  SETUPWV.90     
C         GET A SUCCESFULL RUN OF THE JOB. AT THE END OF                   SETUPWV.91     
C         THE OUTPUT PROTOCOLL A LIST IS PRINTED FOR THE                   SETUPWV.92     
C         OPTIMAL SETTINGS OF THE DIMENSION.                               SETUPWV.93     
C                                                                          SETUPWV.94     
C**   INTERFACE.                                                           SETUPWV.95     
C     ----------                                                           SETUPWV.96     
C                                                                          SETUPWV.97     
C       *PROGRAM* *SETUP*                                                  SETUPWV.98     
C                                                                          SETUPWV.99     
C                                                                          SETUPWV.100    
C       ALL UNITS ARE DEFINE IN SECTION 1. OF THIS PROGRAM.                SETUPWV.101    
C                                                                          SETUPWV.102    
C  arrays from these WAM common blocks are filled and returned to MAIN     SETUPWV.103    
C                                                                          SETUPWV.104    
C       COMMON BLOCKS COUPLE, CURRENT, FREDIR, INDNL, GRIDPAR, MAP,        SETUPWV.105    
C       COUT, TABLE, AND SHALLOW ARE WRITTEN TO UNIT IU07 AND/OR IU17.     SETUPWV.106    
C       ALL FREQUENCY AND DIRECTION DEPENDENT ARRAYS ARE WRITTEN FROM      SETUPWV.107    
C       1 TO THE USED NUMBER OF FREQUENCIES AND THE USED NUMBER OF         SETUPWV.108    
C       DIRECTIONS.                                                        SETUPWV.109    
C       OTHER ARRAYS ARE WRITTEN ACCORDING TO THEIR DIMENSIONS.            SETUPWV.110    
C                                                                          SETUPWV.111    
C     EXTERNALS.                                                           SETUPWV.112    
C     ----------                                                           SETUPWV.113    
C                                                                          SETUPWV.114    
C       *AKI*       - COMPUTES WAVE NUMBER.                                SETUPWV.115    
C       *CHECK*     - CHECKS CONSISTENCY OF BLOCK OVERLAPS.                SETUPWV.116    
C       *JAFU*      - ANGULAR INDEX OF NON LINEAR INTERACTION              SETUPWV.117    
C       *MBLOCK*    - PREPARES ONE BLOCK                                   SETUPWV.118    
C       *MFREDIR*   - COMPUTES FREQUENCY/DIRECTION COMMON FREDIR           SETUPWV.119    
C       *MGRID*     - ARRANGES GRID FOR MODEL.                             SETUPWV.120    
C       *MTABS*     - COMPUTES TABLES USED FOR SHALLOW WATER               SETUPWV.121    
C       *MUBUF*     - COMPUTES COMMON UBUF.                                SETUPWV.122    
C       *NLWEIGT*   - COMPUTES NON LINEAR WEIGHTS IN COMMON INDNL          SETUPWV.123    
C       *STRESS*    - STRESS TABLE.                                        SETUPWV.124    
C       *TAUHF*     - HIGH FREQUENCY STRESS TABLE.                         SETUPWV.125    
C                                                                          SETUPWV.126    
C     REFERENCE.                                                           SETUPWV.127    
C     ----------                                                           SETUPWV.128    
C                                                                          SETUPWV.129    
C       NONE.                                                              SETUPWV.130    
C                                                                          SETUPWV.131    
      iu06=6                                                               SETUPWV.132    
C                                                                          SETUPWV.133    
C ----------------------------------------------------------------------   SETUPWV.134    
Cxx                                                                        SETUPWV.135    
C*    3. INITIALISE TOTAL NUMBER OF BLOCKS,                                SETUPWV.136    
C*       AND GRID INCREMENTS IN RADIENS AND METRES.                        SETUPWV.137    
C        ------------------------------------------                        SETUPWV.138    
C                                                                          SETUPWV.139    
 3000 CONTINUE                                                             SETUPWV.140    
      IGL=0                                                                SETUPWV.141    
      DELPHI =  XDELLA*CIRC/360.                                           SETUPWV.142    
      DELLAM =  XDELLO*CIRC/360.                                           SETUPWV.143    
      DO 3001 K=1,NY                                                       SETUPWV.144    
         XLAT = (AMOSOP + REAL(K-1)*XDELLA)*RAD                            SETUPWV.145    
         SINPH(K) = SIN(XLAT)                                              SETUPWV.146    
         COSPH(K) = COS(XLAT)                                              SETUPWV.147    
 3001 CONTINUE                                                             SETUPWV.148    
C                                                                          SETUPWV.149    
C ----------------------------------------------------------------------   SETUPWV.150    
C                                                                          SETUPWV.151    
C*    4. COMPUTE GRID INDEPENDENT COMMON BLOCKS.                           SETUPWV.152    
C        ---------------------------------------                           SETUPWV.153    
C                                                                          SETUPWV.154    
 4000 CONTINUE                                                             SETUPWV.155    
C                                                                          SETUPWV.156    
C*    4.1 COMMON FREDIR (FREQUENCY/DIRECTION CONST).                       SETUPWV.157    
C         ------------------------------------------                       SETUPWV.158    
C                                                                          SETUPWV.159    
 4100 CONTINUE                                                             SETUPWV.160    
                                                                           SETUPWV.161    
C       array FR is read from the dump                                     WVV0F401.17     
C       here call mfredir to calculate the other arrays                    WVV0F401.18     
C                                                                          WVV0F401.19     
        WRITE(6,*)'calling mfredir from setupwv'                           GIE0F403.622    
        CALL MFREDIR (fr(1),                                               WVV0F401.21     
*CALL ARGWVAL                                                              WVV0F401.22     
*CALL ARGWVFD                                                              WVV0F401.23     
     & icode)                                                              WVV0F401.24     
C                                                                          WVV0F401.25     
C                                                                          SETUPWV.164    
C*    4.2 COMMON INDNL (WEIGHT OF NON-LINEAR INTERACTION).                 SETUPWV.165    
C         ------------------------------------------------                 SETUPWV.166    
C                                                                          SETUPWV.167    
 4200 CONTINUE                                                             SETUPWV.168    
C                                                                          SETUPWV.169    
      WRITE(6,*)'calling nlweigt'                                          GIE0F403.623    
      call nlweigt (ml,kl,                                                 SETUPWV.171    
*CALL ARGWVAL                                                              SETUPWV.172    
*CALL ARGWVFD                                                              SETUPWV.173    
*CALL ARGWVNL                                                              SETUPWV.174    
     & icode)                                                              SETUPWV.175    
      WRITE(6,*)'after nlweigt'                                            GIE0F403.624    
C                                                                          SETUPWV.177    
C*    4.3 COMMON SHALLOW (SHALLOW WATER TABLES).                           SETUPWV.178    
C         --------------------------------------                           SETUPWV.179    
C                                                                          SETUPWV.180    
      WRITE(6,*)'calling mtabs'                                            GIE0F403.625    
      CALL MTABS (ml,kl,                                                   SETUPWV.182    
*CALL ARGWVAL                                                              SETUPWV.183    
*CALL ARGWVSH                                                              SETUPWV.184    
*CALL ARGWVFD                                                              SETUPWV.185    
     & icode)                                                              SETUPWV.186    
C                                                                          SETUPWV.187    
C*    4.4 COMMON COUPLE.                                                   SETUPWV.188    
C         --------------                                                   SETUPWV.189    
C                                                                          SETUPWV.190    
      BETAMAX = 1.20                                                       SETUPWV.191    
      ZALP    = 0.0110                                                     SETUPWV.192    
      ALPHA   = 0.0100                                                     SETUPWV.193    
      XKAPPA  = 0.41                                                       SETUPWV.194    
      XNLEV   = 10.0                                                       SETUPWV.195    
C                                                                          SETUPWV.196    
C*    4.4 COMMON TABLE (STRESS TABLES).                                    SETUPWV.197    
C         -----------------------------                                    SETUPWV.198    
C                                                                          SETUPWV.199    
      WRITE(6,*)'calling stress'                                           GIE0F403.626    
      CALL STRESS (                                                        SETUPWV.201    
*CALL ARGWVCP                                                              SETUPWV.202    
*CALL ARGWVTB                                                              SETUPWV.203    
     & icode)                                                              SETUPWV.204    
                                                                           SETUPWV.205    
      WRITE(6,*)'calling tauhf'                                            GIE0F403.627    
      CALL TAUHF (FR(ML),                                                  SETUPWV.207    
*CALL ARGWVAL                                                              SETUPWV.208    
*CALL ARGWVCP                                                              SETUPWV.209    
*CALL ARGWVTB                                                              SETUPWV.210    
     & icode)                                                              SETUPWV.211    
C                                                                          SETUPWV.212    
C ----------------------------------------------------------------------   SETUPWV.213    
C                                                                          SETUPWV.214    
C*    5. GENERATE OUTPUT GRID INFORMATION.                                 SETUPWV.215    
C        ---------------------------------                                 SETUPWV.216    
C                                                                          SETUPWV.217    
 5000 CONTINUE                                                             SETUPWV.218    
C                                                                          SETUPWV.219    
C*    5.2 COMPUTATION OF BLOCKS.                                           SETUPWV.220    
C         ----------------------                                           SETUPWV.221    
C                                                                          SETUPWV.222    
 5200 CONTINUE                                                             SETUPWV.223    
                                                                           SETUPWV.224    
      WRITE(6,*)'calling mgrid'                                            GIE0F403.628    
      CALL MGRID (IA1,                                                     SETUPWV.226    
*CALL ARGWVAL                                                              SETUPWV.227    
*CALL ARGWVMP                                                              SETUPWV.228    
*CALL ARGWVGD                                                              SETUPWV.229    
     & icode)                                                              SETUPWV.230    
C                                                                          SETUPWV.231    
C ----------------------------------------------------------------------   SETUPWV.232    
C                                                                          SETUPWV.233    
C*    8. GENERATE AND WRITE COMMON UBUF.                                   SETUPWV.234    
C        -------------------------------                                   SETUPWV.235    
C                                                                          SETUPWV.236    
 8000 CONTINUE                                                             SETUPWV.237    
C                                                                          SETUPWV.238    
         WRITE(6,*)'calling mubuf'                                         GIE0F403.629    
         CALL MUBUF (IA1,                                                  SETUPWV.240    
*CALL ARGWVAL                                                              SETUPWV.241    
*CALL ARGWVGD                                                              SETUPWV.242    
*CALL ARGWVMP                                                              SETUPWV.243    
*CALL ARGWVKL                                                              SETUPWV.244    
     & icode)                                                              SETUPWV.245    
                                                                           SETUPWV.246    
                                                                           SETUPWV.247    
c TO ADD                                                                   SETUPWV.248    
c   propdot needs a current field if irefra=2                              SETUPWV.249    
c   read current field here (steady state currents only for WAM !          SETUPWV.250    
c                                                                          SETUPWV.251    
      if(irefra.eq.2)then                                                  SETUPWV.252    
       WRITE(6,*)'dummy call read currents still to add'                   GIE0F403.630    
      endif                                                                SETUPWV.254    
C                                                                          SETUPWV.255    
C     this subroutine call included from initmdl                           SETUPWV.256    
C     CC call propdot moved to main after depths are set                   SETUPWV.257    
                                                                           SETUPWV.258    
C ----------------------------------------------------------------------   SETUPWV.259    
C                                                                          SETUPWV.260    
C*    10. CONSISTENCY CHECK OF COMPUTED BLOCK PARAMETERS AND               SETUPWV.261    
C*        OUTPUT OF NECESSARY DIMENSIONS.                                  SETUPWV.262    
C         --------------------------------------------------               SETUPWV.263    
C                                                                          SETUPWV.264    
 9100 CONTINUE                                                             SETUPWV.265    
                                                                           SETUPWV.266    
      WRITE(6,*)'calling subroutine check'                                 GIE0F403.631    
      CALL CHECK (IREFRA, ML, KL, IINPC,                                   SETUPWV.268    
*CALL ARGWVAL                                                              SETUPWV.269    
*CALL ARGWVGD                                                              SETUPWV.270    
*CALL ARGWVMP                                                              SETUPWV.271    
     & icode)                                                              SETUPWV.272    
                                                                           SETUPWV.273    
      if(icode.ne.0) then                                                  SETUPWV.274    
       WRITE(6,*)'calling abort in setupwv'                                GIE0F403.632    
       WRITE(6,*)'icode ',icode,' returned from subroutine check'          GIE0F403.633    
       call abort                                                          SETUPWV.277    
      endif                                                                SETUPWV.278    
                                                                           SETUPWV.279    
      return                                                               SETUPWV.280    
      END                                                                  SETUPWV.281    
*ENDIF                                                                     SETUPWV.282