*IF DEF,W08_1A                                                             GLW1F404.57     
! subroutine WAV_FOR_STEP                                                  WAVFRST1.3      
!                                                                          WAVFRST1.4      
! Description:                                                             WAVFRST1.5      
!   called by WAV_STEP: interfaces the UM control with wave model          WAVFRST1.6      
!   (WAM derived) subroutines                                              WAVFRST1.7      
!                                                                          WAVFRST1.8      
!                                                                          WAVFRST1.9      
! Current Code Owner: Martin Holt                                          WAVFRST1.10     
!                                                                          WAVFRST1.11     
! History:                                                                 WAVFRST1.12     
! Version   Date     Comment                                               WAVFRST1.13     
! -------   ----     -------                                               WAVFRST1.14     
! 4.1       June 1996 Original code. M Holt                                WAVFRST1.15     
!                                                                          WAVFRST1.16     
! Code Description:                                                        WAVFRST1.17     
!   Language: FORTRAN 77 + common extensions.                              WAVFRST1.18     
!- End of header                                                           WAVFRST1.19     
                                                                           WAVFRST1.20     

         SUBROUTINE WAV_FOR_STEP(ishallo, irefra,                          ,2WAVFRST1.21     
     & energy, mdata, idelt, idelpro,                                      WAVFRST1.22     
*CALL ARGWVAL                                                              WAVFRST1.23     
*CALL ARGWVFD                                                              WAVFRST1.24     
*CALL ARGWVWD                                                              WAVFRST1.25     
*CALL ARGWVSH                                                              WAVFRST1.26     
*CALL ARGWVCP                                                              WAVFRST1.27     
*CALL ARGWVTB                                                              WAVFRST1.28     
*CALL ARGWVNL                                                              WAVFRST1.29     
*CALL ARGWVKL                                                              WAVFRST1.30     
*CALL ARGWVGD                                                              WAVFRST1.31     
*CALL ARGWVMP                                                              WAVFRST1.32     
*CALL ARGWVRF                                                              WAVFRST1.33     
*CALL ARGWVCU                                                              WAVFRST1.34     
                                                                           WAVFRST1.35     
     & len_pd,len_sd,len_s2,len_p2,                                        WAVFRST1.36     
     & icode,cmessage)                                                     WAVFRST1.37     
                                                                           WAVFRST1.38     
*CALL PARWVSH                                                              WAVFRST1.39     
*CALL PARWVTB                                                              WAVFRST1.40     
*CALL PARCONS                                                              WAVFRST1.41     
                                                                           WAVFRST1.42     
*CALL TYPWVFD                                                              WAVFRST1.43     
*CALL TYPWVMN                                                              WAVFRST1.44     
*CALL TYPWVSR                                                              WAVFRST1.45     
*CALL TYPWVWD                                                              WAVFRST1.46     
*CALL TYPWVSH                                                              WAVFRST1.47     
*CALL TYPWVCP                                                              WAVFRST1.48     
*CALL TYPWVTB                                                              WAVFRST1.49     
*CALL TYPWVNL                                                              WAVFRST1.50     
*CALL TYPWVKL                                                              WAVFRST1.51     
*CALL TYPWVGD                                                              WAVFRST1.52     
*CALL TYPWVMP                                                              WAVFRST1.53     
*CALL TYPWVRF                                                              WAVFRST1.54     
*CALL TYPWVCU                                                              WAVFRST1.55     
*CALL TYPWVSD                                                              WAVFRST1.56     
*CALL TYPWVPD                                                              WAVFRST1.57     
*CALL TYPWVAL                                                              WAVFRST1.58     
                                                                           WAVFRST1.59     
      real energy(mdata,nang,nfre)                                         WAVFRST1.60     
                                                                           WAVFRST1.61     
      INTEGER ICODE            ! OUT return code                           WAVFRST1.62     
      CHARACTER*80 CMESSAGE    ! OUT message accompanying return code      WAVFRST1.63     
                                                                           WAVFRST1.64     
c     local arrays:                                                        WAVFRST1.65     
                                                                           WAVFRST1.66     
*CALL TYPWVF3                                                              WAVFRST1.67     
*CALL TYPWVF1                                                              WAVFRST1.68     
*CALL TYPWVS2                                                              WAVFRST1.69     
*CALL TYPWVP2                                                              WAVFRST1.70     
                                                                           WAVFRST1.71     
      real temp(mdata)                                                     WAVFRST1.72     
      real over(nover,nang,nfre,nblo) ! array to hold overlapping          WAVFRST1.73     
C                                     ! rows of energy at time t           WAVFRST1.74     
C ----------------------------------------------------------------------   WAVFRST1.75     
C                                                                          WAVFRST1.76     
C**** *WAMODEL* - 3-G WAM MODEL - TIME INTEGRATION OF WAVE FIELDS.         WAVFRST1.77     
C                                                                          WAVFRST1.78     
C     S.D. HASSELMANN  MPI       1.12.85                                   WAVFRST1.79     
C                                                                          WAVFRST1.80     
C     G. KOMEN         KNMI         6.86  MODIFIED FOR SHALLOW WATER       WAVFRST1.81     
C     P. JANSSEN                          ASPECTS.                         WAVFRST1.82     
C                                                                          WAVFRST1.83     
C     S.D. HASSELMANN  MPI       15.2.87  MODIFIED FOR CYBER 205.          WAVFRST1.84     
C                                                                          WAVFRST1.85     
C     P. LIONELLO      ISDGM      6.3.87  MODIFIED TO OUTPUT SWELL.        WAVFRST1.86     
C                                                                          WAVFRST1.87     
C     S.D. HASSELMANN  MPI        1.6.87  ALL VERSIONS COMBINED INTO       WAVFRST1.88     
C                                         ONE MODEL. DEEP AND SHALLOW      WAVFRST1.89     
C                                         WATER , CRAY AND CYBER 205       WAVFRST1.90     
C                                         VERSION.                         WAVFRST1.91     
C                                                                          WAVFRST1.92     
C     CYCLE_2 MODICIFATIONS:                                               WAVFRST1.93     
C     ----------------------                                               WAVFRST1.94     
C                                                                          WAVFRST1.95     
C     L. ZAMBRESKY     GKSS        10.87  OPTIMIZED FOR CRAY, CYBER 205    WAVFRST1.96     
C     H. GUNTHER                                                           WAVFRST1.97     
C                                                                          WAVFRST1.98     
C     A. SPEIDEL       MPI          4.88  VARIABLE DIMENSIONS, INTERNAL    WAVFRST1.99     
C                                         CHECKS (CFL-CRITERION).          WAVFRST1.100    
C                                                                          WAVFRST1.101    
C     A. SPEIDEL       MPI         11.88  CHANGES FOR CRAY-2.              WAVFRST1.102    
C                                                                          WAVFRST1.103    
C     K. HUBBERT       POL          6.89  DEPTH AND CURRENT REFRACTION.    WAVFRST1.104    
C                                         PRECALCULATION OF TERMS IN       WAVFRST1.105    
C                                         *PROPDOT*.                       WAVFRST1.106    
C                                         SOLVE WAVE ACTION EQUATION       WAVFRST1.107    
C                                         FOR CURRENT REFRACTION.          WAVFRST1.108    
C                                                                          WAVFRST1.109    
C     CYCLE_3 MODICIFATIONS:                                               WAVFRST1.110    
C     ----------------------                                               WAVFRST1.111    
C                                                                          WAVFRST1.112    
C     R. PORTZ , S.D. HASSELMANN   MPI          1990                       WAVFRST1.113    
C                                                                          WAVFRST1.114    
C      - RESTRUCTURE MODEL TO CALL THE ACTUAL INTEGRATION IN TIME          WAVFRST1.115    
C        AS A SUBROUTINE: WAMODEL. A SHELL PROGRAM "WAMSHELL" READS        WAVFRST1.116    
C        OUTPUT FROM PREPROC AND COMPUTES THE WIND ARRAYS FOR THE          WAVFRST1.117    
C        INTEGRATION PERIOD FROM PREWIND, WHICH HAS BEEN INCORPORATED      WAVFRST1.118    
C        AS A SUBROUTINE.                                                  WAVFRST1.119    
C      - ALL INTERMEDIATE AND RESTART I/O IS DONE IN THE SUBROUTINE        WAVFRST1.120    
C        WAMODEL AND INPREST.                                              WAVFRST1.121    
C      - THE COMMON BLOCK IN THE PREPROCESSOR AND MODEL ARE MADE           WAVFRST1.122    
C        COMPATIBLE.                                                       WAVFRST1.123    
C      - THE COMPUTATION OF SEVERAL PARAMETERS HAS BEEN TRANSFERRED        WAVFRST1.124    
C        FROM THE MODEL TO PREPROC.                                        WAVFRST1.125    
C      - DEPTH AND CURRENT REFRACTION HAS BEEN INCORPORATED INTO THE       WAVFRST1.126    
C        MODEL.                                                            WAVFRST1.127    
C      - OPEN BOUNDARIES ARE INCORPORATED IN THE MODEL.                    WAVFRST1.128    
C      - SEVERAL MINOR ERRORS HAVE BEEN REMOVED.                           WAVFRST1.129    
C      - THE BUFFERED I/O FOR THE CYBER 205 HAS BEEN CHANGED INTO A        WAVFRST1.130    
C        BINARY READ AND WRITE.                                            WAVFRST1.131    
C                                                                          WAVFRST1.132    
C     CYCLE_4 MODICIFATIONS:                                               WAVFRST1.133    
C     ----------------------                                               WAVFRST1.134    
C                                                                          WAVFRST1.135    
C     L. ZAMBRESKY   GKSS/ECMWF   6.89  ECMWF SUB VERSION                  WAVFRST1.136    
C                                       BASED ON CYCLE_2.                  WAVFRST1.137    
C                                                                          WAVFRST1.138    
C     H. GUNTHER     GKSS/ECMWF 10.89  ECMWF SUB VERSION REORGANIZED.      WAVFRST1.139    
C                                      - COMMON BLOCK STRUCTURE.           WAVFRST1.140    
C                                      - BLOCKING STRUCTURE.               WAVFRST1.141    
C                                      - TIME COUNTING.                    WAVFRST1.142    
C                                      - GRIDDED OUTPUT FIELDS.            WAVFRST1.143    
C                                      - HEADERS ADDED TO OUTPUT FILES.    WAVFRST1.144    
C                                      - ERRORS IN PROPAGATION CORRECTED   WAVFRST1.145    
C                                                                          WAVFRST1.146    
C     P.A.E.M. JANSSEN KNMI      1990  COUPLED MODEL.                      WAVFRST1.147    
C                                                                          WAVFRST1.148    
C     H. GUNTHER     GKSS/ECMWF  8.91  LOGARITHMIC DEPTH TABLES.           WAVFRST1.149    
C                                      MPI CYCLE_3 AND ECMWF VERSIONS      WAVFRST1.150    
C                                      COMBINED INTO CYCLE_4.              WAVFRST1.151    
C                                                                          WAVFRST1.152    
CSHALLOW                                                                   WAVFRST1.153    
C          DIFFERENCES FOR SHALLOW WATER RUNS TO DEEP WATER RUNS           WAVFRST1.154    
C          ARE ENCLOSED IN COMMENT LINES : 'CSHALLOW'.                     WAVFRST1.155    
CSHALLOW                                                                   WAVFRST1.156    
CNEST                                                                      WAVFRST1.157    
C          DIFFERENCES FOR NESTED GRID RUNS TO NORMAL RUNS                 WAVFRST1.158    
C          ARE ENCLOSED IN COMMENT LINES : 'CNEST'.                        WAVFRST1.159    
CNEST                                                                      WAVFRST1.160    
CREFRA                                                                     WAVFRST1.161    
C          DIFFERENCES FOR REFRACTION RUNS TO NORMAL RUNS                  WAVFRST1.162    
C          ARE ENCLOSED IN COMMENT LINES : 'CREFRA'.                       WAVFRST1.163    
CREFRA                                                                     WAVFRST1.164    
C                                                                          WAVFRST1.165    
C*    PURPOSE.                                                             WAVFRST1.166    
C     --------                                                             WAVFRST1.167    
C                                                                          WAVFRST1.168    
C       COMPUTATION OF THE 2-D FREQUENCY-DIRECTION WAVE SPECTRUM AT ALL    WAVFRST1.169    
C       GRID POINTS FOR A GIVEN INITIAL SPECTRUM AND FORCING SURFACE       WAVFRST1.170    
C       STRESS FIELD.                                                      WAVFRST1.171    
C                                                                          WAVFRST1.172    
C**   INTERFACE.                                                           WAVFRST1.173    
C     ----------                                                           WAVFRST1.174    
C                                                                          WAVFRST1.175    
C       *CALL* *WAMODEL (NADV)*                                            WAVFRST1.176    
C         *NADV*     INTEGER   NUMBER OF ADVECTION ITERATIONS.             WAVFRST1.177    
C                                                                          WAVFRST1.178    
C       (in original WAM this is number of adsvection steps before         WAVFRST1.179    
C         next wind input - not required by UM wave)                       WAVFRST1.180    
C                                                                          WAVFRST1.181    
C     METHOD.                                                              WAVFRST1.182    
C     -------                                                              WAVFRST1.183    
C                                                                          WAVFRST1.184    
C       GRID POINTS ARE LAT - LONG,VECTORIZATION IS ACHIEVED BY RUNNING    WAVFRST1.185    
C       THROUGH THE GRID POINTS IN AN INNER LOOP ORGANIZED AS 1-D ARRAY    WAVFRST1.186    
C       IN BLOCKS,-ALL COMPUTATIONS ARE CARRIED OUT FOR ONE BLOCK AT A     WAVFRST1.187    
C       TIME (SEE "BLOCK STRUCTURE" BELOW)                                 WAVFRST1.188    
C                                                                          WAVFRST1.189    
C       ALL COMPONENTS OF THE SPECTRUM ARE COMPUTED PROGNOSTICALLY FROM    WAVFRST1.190    
C       THE SPECTRAL TRANSPORT EQUATION UP TO A VARIABLE CUT-OFF           WAVFRST1.191    
C       FREQUENCY = MAX(4*FPM,2.5*FMEAN),WHERE FPM IS THE                  WAVFRST1.192    
C       PIERSON MOSKOVITZ FREQUENCY AND FMEAN IS THE MEAN FREQUENCY,       WAVFRST1.193    
C       BEYOND THE PROGNOSTIC CUTOFF A DIAGNOSTIC F**-5 TAIL IS ATTACHED   WAVFRST1.194    
C       CONTINUOUSLY FOR EACH DIRECTION,                                   WAVFRST1.195    
C                                                                          WAVFRST1.196    
C       SOURCE FUNCTIONS ARE TAKEN FROM KOMEN ET AL(1984)                  WAVFRST1.197    
C                                                                          WAVFRST1.198    
C       THE NONLINEAR TRANSFER IS PARAMETERIZED BY THE DISCRETE INTER-     WAVFRST1.199    
C       ACTION APPROXIMATION OF HASSELMANN ET AL (1985B)                   WAVFRST1.200    
C                                                                          WAVFRST1.201    
C       THE SOURCE FUNCTION AND THE ADVECTION TERM ARE INTEGRATED ON TWO   WAVFRST1.202    
C       DIFFERENT TIME STEP LEVELS AND WITH DIFFERENT METHODS,-THE         WAVFRST1.203    
C       ADVECTION TIME STEP IS A MULTIPLE OF THE SOURCE FUNCTION           WAVFRST1.204    
C       TIME STEP.                                                         WAVFRST1.205    
C                                                                          WAVFRST1.206    
C       THE SOURCE FUNCTIONS ARE INTEGRATED IMPLICITLY ACCORDING TO        WAVFRST1.207    
C       HASSELMANN AND HASSELMANN (1985A),-THE RELEVANT FUNCTIONAL         WAVFRST1.208    
C       DERIVATIVES OF THE INDIVIDUAL SOURCE FUNCTIONS REQUIRED FOR THE    WAVFRST1.209    
C       SOLUTION OF THE IMPLICIT EQUATION ARE COMPUTED WITHIN THE SOURCE   WAVFRST1.210    
C       FUNCTION SUBS,- THE TIME STEP IS TYPICALLY 20 MIN,                 WAVFRST1.211    
C                                                                          WAVFRST1.212    
C       THE ADVECTION IS INTEGRATED BY A FIRST ORDER UPWIND SCHEME,ALSO    WAVFRST1.213    
C       ACCORDING TO HASSELMANN AND HASSELMANN (1985A),-THE ADVECTIVE      WAVFRST1.214    
C       TIMESTEP IS DEPENDENT ON THE FREQUENCY AND SPATIAL GRID IN         WAVFRST1.215    
C       ACCORDANCE WITH CFL,                                               WAVFRST1.216    
C                                                                          WAVFRST1.217    
C       WINDS ARE READ IN EVERY WIND TIME STEP.IF THE WIND TIME STEP IS    WAVFRST1.218    
C       GREATER THAN THE SOURCE TERM TIME STEP DELTWIND/DELTSOURCE STEPS   WAVFRST1.219    
C       ARE INTEGRATED WITH CONSTANT WINDS,                                WAVFRST1.220    
C       WIND TIME STEP,PROPAGATION TIME STEP AND SOURCE TERM TIME STEP     WAVFRST1.221    
C       SHOULD HAVE INTEGER RATIOS, THEY ARE GIVEN IN SECONDS AT           WAVFRST1.222    
C       FULL MINUTES.                                                      WAVFRST1.223    
C                                                                          WAVFRST1.224    
CNEST                                                                      WAVFRST1.225    
C       ZERO ENERGY INFLUX IS ASSUMED AT COAST LINES. OPEN BOUNDARIES      WAVFRST1.226    
C       ARE INCORPORATED IN THE MODEL, IF IT RUNS AS A NESTED GRID.        WAVFRST1.227    
CNEST                                                                      WAVFRST1.228    
C                                                                          WAVFRST1.229    
C       BLOCK STRUCTURE (SEE PREPROC FOR DETAILS):                         WAVFRST1.230    
C       SEA POINTS ARE COLLECTED INTO A 1-DIMENSIONAL ARRAY.               WAVFRST1.231    
C       BLOCKS OF MAXIMALLY NIBLO ELEMENTS.                                WAVFRST1.232    
C       SEA POINTS ARE COUNTED ALONG LINES OF LATITUDES FROM LEFT COAST    WAVFRST1.233    
C       TO RIGHT COAST WORKING FROM SOUTH TO NORTH.                        WAVFRST1.234    
C       BLOCKS OVERLAP OVER TWO LATITUDE LINES,TO COMPUTE NORTH-SOUTH      WAVFRST1.235    
C       ADVECTION TERMS, SEE ALSO COMMON GRIDPAR AND UBUF.                 WAVFRST1.236    
C                                                                          WAVFRST1.237    
C       THE WIND FILES FOR THE BLOCKED WINDS CREATED BY PREWIND ARE        WAVFRST1.238    
C       READ AND DELETED IN SUB IMPLSCH (IU17 AND IU18). THE FILE          WAVFRST1.239    
c       NAMES ARE CREATED IN SUB CREWFN AND AN IMPLICIT OPEN IS USED.      WAVFRST1.240    
C                                                                          WAVFRST1.241    
C       THE FILE HANDLING SUBS OPENFIL, GSFILE AND CREWFN ARE COMPUTER     WAVFRST1.242    
C       DEPENDENT AND MAY BE ADOPTED BY THE USER.                          WAVFRST1.243    
C       THE PROGRAM CLOSES AND DELETES ALL WORK FILES.                     WAVFRST1.244    
C                                                                          WAVFRST1.245    
C       ALL PARAMETERS HAVE TO BE THE VALUES GIVEN AT THE END OF THE       WAVFRST1.246    
C       PREPROC OUTPUT IN COLUMN 'REQUIRED'.                               WAVFRST1.247    
C                                                                          WAVFRST1.248    
C     EXTERNALS.                                                           WAVFRST1.249    
C     ----------                                                           WAVFRST1.250    
C                                                                          WAVFRST1.251    
C       *AIRSEA*    - SURFACE LAYER STRESS.                                WAVFRST1.252    
CREFRA                                                                     WAVFRST1.253    
C       *DOTDC*     - READ COMMON REFDOT.                                  WAVFRST1.254    
CREFRA                                                                     WAVFRST1.255    
C       *FEMEAN*    - COMPUTATION OF MEAN FREQUENCY AT EACH GRID POINT.    WAVFRST1.256    
C                                                                          WAVFRST1.257    
C       *IMPLSCH*   - IMPLICIT SCHEME FOR INTEGRATION OF SOURCE            WAVFRST1.258    
C                     FUNCTIONS IN TIME AND INPUT OF WINDS.                WAVFRST1.259    
CREFRA                                                                     WAVFRST1.260    
C       *INTPOL*    - MAP SPECTRUM FROM SIGMA TO OMEGA SPACE.              WAVFRST1.261    
CREFRA                                                                     WAVFRST1.262    
CSHALLOW                                                                   WAVFRST1.263    
C       *SBOTTOM*   - COMPUTES BOTTOM DISSIPATION SOURCE TERM AND          WAVFRST1.264    
C                     LINEAR CONTRIBUTION TO FUNCTIONAL MATRIX.            WAVFRST1.265    
CSHALLOW                                                                   WAVFRST1.266    
C       *SDISSIP*   - COMPUTATION OF DISSIPATION SOURCE FUNCTION           WAVFRST1.267    
C                     AND LINEAR CONTRIBUTION OF DISSIPATION TO            WAVFRST1.268    
C                     FUNCTIONAL MATRIX IN IMPLICIT SCHEME.                WAVFRST1.269    
C       *SEMEAN*    - COMPUTATION OF TOTAL ENERGY AT EACH GRID POINT.      WAVFRST1.270    
C                                                                          WAVFRST1.271    
C       *SINPUT*    - COMPUTATION OF INPUT SOURCE FUNCTION, AND            WAVFRST1.272    
C                     LINEAR CONTRIBUTION OF INPUT SOURCE FUNCTION         WAVFRST1.273    
C                     TO FUNCTIONAL MATRIX IN IMPLICIT SCHEME.             WAVFRST1.274    
C       *SNONLIN*   - COMPUTATION OF NONLINEAR TRANSFER RATE AND           WAVFRST1.275    
C                     DIAGONAL LINEAR CONTRIBUTION OF NONLINEAR SOURCE     WAVFRST1.276    
C                     FUNCTION TO FUNCTIONAL MATRIX.                       WAVFRST1.277    
C                                                                          WAVFRST1.278    
C       *STRESSO*   - COMPUTATION OF WAVE STRESS.                          WAVFRST1.279    
C                                                                          WAVFRST1.280    
C     REFERENCE.                                                           WAVFRST1.281    
C     ----------                                                           WAVFRST1.282    
C                                                                          WAVFRST1.283    
C       SNYDER, R.L., F.W. DOBSON, J.A. ELLIOT, AND R.B. LONG:             WAVFRST1.284    
C          ARRAY MEASUREMENTS OF ATMOSPHERIC PRESSURE FLUCTUATIONS         WAVFRST1.285    
C          ABOVE SURFACE GRAVITY WAVES. J.FLUID MECH. 102, 1-59 ,1981.     WAVFRST1.286    
C       G. KOMEN, S. HASSELMANN, K. HASSELMANN:                            WAVFRST1.287    
C          ON THE EXISTENCE OF A FULLY DEVELOPED WIND SEA SPECTRUM.        WAVFRST1.288    
C          JPO,1984.                                                       WAVFRST1.289    
C       S. HASSELMANN, K. HASSELMANN, J.H. ALLENDER, T.P. BARNETT:         WAVFRST1.290    
C          IMPROVED METHODS OF COMPUTING AND PARAMETERIZING THE            WAVFRST1.291    
C          NONLINEAR ENERGY TRANSFER IN A GRAVITY WAVE SPECTRUM.           WAVFRST1.292    
C          JPO, 1985.                                                      WAVFRST1.293    
C       S. HASSELMANN, K. HASSELMANN: A GLOBAL WAVE MODEL,                 WAVFRST1.294    
C          WAM REPORT,JUNE,30/1985.                                        WAVFRST1.295    
C       P. JANSSEN, G. KOMEN: A SHALLOW WATER EXTENSION OF THE             WAVFRST1.296    
C          3-G WAM-MODEL. WAM REPORT 1985.                                 WAVFRST1.297    
C       THE WAMDI GROUP: THE WAM MODEL - A THIRD GENERATION OCEAN          WAVFRST1.298    
C          WAVE PREDICTION MODEL. JPO, VOL. 18, NO. 12, 1988.              WAVFRST1.299    
C       P.A.E.M JANSSEN: JPO, 1989 AND 1991.                               WAVFRST1.300    
C       K. HASSELMANN: TRANSPORT EQUATION OF FINITE DEPTH SURFACE          WAVFRST1.301    
C          WAVE SPECTRUM IN TIME DPENDANT CURRENT AND DEPTH FIELD USING    WAVFRST1.302    
C          NONCANONICAL SPACIAL (SPHERICAL) AND WAVE NUMBER (FRQUENCY-     WAVFRST1.303    
C          DIRECTION) COORDINATES. WAM REPROT 1988.                        WAVFRST1.304    
C                                                                          WAVFRST1.305    
C ----------------------------------------------------------------------   WAVFRST1.306    
      iu06=6                                                               WAVFRST1.307    
                                                                           WAVFRST1.308    
c  note required to add the time controls here previously done within      WAVFRST1.309    
c  implsch - need do over ratio idelpro to idelt.                          WAVFRST1.310    
c                                                                          WAVFRST1.311    
c   eg idelpro=1200 idelt=1200 says n_srce-step = 1                        WAVFRST1.312    
c      idelpro=3600 idelt=1200 says n-srce-step = 3                        WAVFRST1.313    
c                                                                          WAVFRST1.314    
       n_srce_step=int(idelpro/idelt)                                      WAVFRST1.315    
                                                                           WAVFRST1.316    
                                                                           WAVFRST1.317    
C                                                                          WAVFRST1.318    
C*    1.5  LOOP FOR BLOCKS OF LATITUDES.                                   WAVFRST1.319    
C          -----------------------------                                   WAVFRST1.320    
C                                                                          WAVFRST1.321    
       if(igl.gt.1) then   ! fill array of overlap energies                WAVFRST1.322    
        nstart_ov=1                                                        WAVFRST1.323    
        do ig=1,igl                                                        WAVFRST1.324    
                                                                           WAVFRST1.325    
         nend_blok=nstart_ov + ijlt(ig) -1                                 WAVFRST1.326    
         nst_ov=nend_blok - (ijlt(ig)-ijls(ig))                            WAVFRST1.327    
                                                                           WAVFRST1.328    
         do m=1,nfre                                                       WAVFRST1.329    
          do k=1,nang                                                      WAVFRST1.330    
           ifill=1                                                         WAVFRST1.331    
c          fill from only the first row of each block.                     WAVFRST1.332    
           do ip=nst_ov,nst_ov+ijl(ig)-ijls(ig)                            WAVFRST1.333    
            over(ifill,k,m,ig)=energy(ip,k,m)                              WAVFRST1.334    
            ifill=ifill+1                                                  WAVFRST1.335    
           enddo                                                           WAVFRST1.336    
          enddo                                                            WAVFRST1.337    
         enddo                                                             WAVFRST1.338    
         nstart_ov=nst_ov                                                  WAVFRST1.339    
        enddo                                                              WAVFRST1.340    
       endif                                                               WAVFRST1.341    
                                                                           WAVFRST1.342    
c      initialise index for extracting blocked data from energy array      WAVFRST1.343    
c                                                                          WAVFRST1.344    
       nstart=1                                                            WAVFRST1.345    
                                                                           WAVFRST1.346    
       DO 1500 IG=1,IGL                                                    WAVFRST1.347    
C                                                                          WAVFRST1.348    
C*    1.5.2 INPUT NEIGHBOURING GRID POINT INDICES (COMMON BLOCK UBUF).     WAVFRST1.349    
C           ----------------------------------------------------------     WAVFRST1.350    
CSHALLOW                                                                   WAVFRST1.351    
C                                                                          WAVFRST1.352    
C*    1.5.3 COMPUTE SHALLOW WATER TABLE INDICES.                           WAVFRST1.353    
C           ------------------------------------                           WAVFRST1.354    
C     calculate indep for the present block                                WAVFRST1.355    
c                                                                          WAVFRST1.356    
            IF (ISHALLO.NE.1) THEN                                         WAVFRST1.357    
               DO 1530 IJ=1,IJLT(IG)                                       WAVFRST1.358    
                  XD = LOG(DEPTH(IJ,IG)/DEPTHA)/LOG(DEPTHD)+1.             WAVFRST1.359    
                  ID = NINT(XD)                                            WAVFRST1.360    
                  ID = MAX(ID,1)                                           WAVFRST1.361    
                  INDEP(IJ) = MIN(ID,NDEPTH)                               WAVFRST1.362    
 1530          CONTINUE                                                    WAVFRST1.363    
            ENDIF                                                          WAVFRST1.364    
CSHALLOW                                                                   WAVFRST1.365    
C                                                                          WAVFRST1.366    
C                                                                          WAVFRST1.367    
C*    1.5.4 COUPLING WITH NEIGHBOURING BLOCKS IG +- 1 AND START            WAVFRST1.368    
C*          INPUT OF SPECTRA FOR BLOCK IG+1.                               WAVFRST1.369    
C           ----------------------------------------------------           WAVFRST1.370    
c            here fill fl1 for this block; no need to use fl2 -            WAVFRST1.371    
c            select data from appropriate part of array 'energy'           WAVFRST1.372    
c            FL1 requires data from 1 to ijlt in each block.               WAVFRST1.373    
c                                                                          WAVFRST1.374    
c            the wam routines fillbl splitbl add on / take off             WAVFRST1.375    
c            the overlapping rows - indexed by ijs ijl relative to         WAVFRST1.376    
c            start of each block                                           WAVFRST1.377    
c                                                                          WAVFRST1.378    
CCC    note if not calling propags then fill fl3 here:                     WAVFRST1.379    
C                                                                          WAVFRST1.380    
c      set index for end of present block on data grid                     WAVFRST1.381    
c                                                                          WAVFRST1.382    
       nend=nstart + ijlt(ig)-1                                            WAVFRST1.383    
                                                                           WAVFRST1.384    
       do l=1,nfre                                                         WAVFRST1.385    
        do k=1,nang                                                        WAVFRST1.386    
                                                                           WAVFRST1.387    
         do ip=1,niblo                                                     WAVFRST1.388    
          fl1(ip,k,l)=0.                                                   WAVFRST1.389    
         enddo                                                             WAVFRST1.390    
                                                                           WAVFRST1.391    
         ifill=1                                                           WAVFRST1.392    
         do ip=nstart,nend                                                 WAVFRST1.393    
          fl1(ifill,k,l)=energy(ip,k,l)                                    WAVFRST1.394    
          ifill=ifill+1                                                    WAVFRST1.395    
         enddo                                                             WAVFRST1.396    
        enddo                                                              WAVFRST1.397    
       enddo                                                               WAVFRST1.398    
                                                                           WAVFRST1.399    
c            if block number greater than one then copy overlap of         WAVFRST1.400    
c            first row values at time t.                                   WAVFRST1.401    
                                                                           WAVFRST1.402    
       if(ig.gt.1) then                                                    WAVFRST1.403    
        do m=1,nfre                                                        WAVFRST1.404    
         do k=1,nang                                                       WAVFRST1.405    
          do ip=1,ijs(ig)-1                                                WAVFRST1.406    
           FL1(ip,k,m)=over(ip,k,m,ig)                                     WAVFRST1.407    
          enddo                                                            WAVFRST1.408    
         enddo                                                             WAVFRST1.409    
        enddo                                                              WAVFRST1.410    
       endif                                                               WAVFRST1.411    
                                                                           WAVFRST1.412    
C*    1.5.5 COMPUTATION OF PROPAGATION.                                    WAVFRST1.413    
C           ---------------------------                                    WAVFRST1.414    
                                                                           WAVFRST1.415    
      CALL PROPAGS(FL1, FL3, IG, irefra, ishallo, idelpro,                 WAVFRST1.416    
*CALL ARGWVAL                                                              WAVFRST1.417    
*CALL ARGWVFD                                                              WAVFRST1.418    
*CALL ARGWVGD                                                              WAVFRST1.419    
*CALL ARGWVMP                                                              WAVFRST1.420    
*CALL ARGWVRF                                                              WAVFRST1.421    
*CALL ARGWVSH                                                              WAVFRST1.422    
*CALL ARGWVCU                                                              WAVFRST1.423    
*CALL ARGWVKL                                                              WAVFRST1.424    
*CALL ARGWVP2                                                              WAVFRST1.425    
     & icode)                                                              WAVFRST1.426    
                                                                           WAVFRST1.427    
                                                                           WAVFRST1.428    
                                                                           WAVFRST1.429    
C*    1.5.6 INTEGRATION OF SOURCE TERMS OVER SUB TIME STEPS BETWEEN        WAVFRST1.430    
C*          PROPAGATION TIME STEPS.                                        WAVFRST1.431    
C           -------------------------------------------------------        WAVFRST1.432    
C                                                                          WAVFRST1.433    
       do istep=1,n_srce_step                                              WAVFRST1.434    
                                                                           WAVFRST1.435    
       CALL IMPLSCH (FL3, FL1, IJS(IG), IJL(IG),                           WAVFRST1.436    
     &    IG, IGL, ishallo,idelt,                                          WAVFRST1.437    
*CALL ARGWVAL                                                              WAVFRST1.438    
*CALL ARGWVFD                                                              WAVFRST1.439    
*CALL ARGWVMN                                                              WAVFRST1.440    
*CALL ARGWVSR                                                              WAVFRST1.441    
*CALL ARGWVWD                                                              WAVFRST1.442    
*CALL ARGWVSH                                                              WAVFRST1.443    
*CALL ARGWVCP                                                              WAVFRST1.444    
*CALL ARGWVTB                                                              WAVFRST1.445    
*CALL ARGWVNL                                                              WAVFRST1.446    
*CALL ARGWVS2                                                              WAVFRST1.447    
     & icode)                                                              WAVFRST1.448    
                                                                           WAVFRST1.449    
                                                                           WAVFRST1.450    
       enddo                                                               WAVFRST1.451    
                                                                           WAVFRST1.452    
CNEST                                                                      WAVFRST1.453    
C                                                                          WAVFRST1.454    
C   original code in implsch here extracted coarse mesh boundary outputs   WAVFRST1.455    
c   and inserted fine mesh boundary inputs. This is best done at the top   WAVFRST1.456    
c   level. code has been removed from here. ALSO will expect to use UM     WAVFRST1.457    
c   routines that are available in preference to WAM supplied routines     WAVFRST1.458    
C                                                                          WAVFRST1.459    
CNEST                                                                      WAVFRST1.460    
C                                                                          WAVFRST1.461    
C   copy the energy for time t+dt back to main array.                      WAVFRST1.462    
c                                                                          WAVFRST1.463    
c   Both propags and implsch only work on points ijs to ijl                WAVFRST1.464    
c   within each block. but propags accesses rows up to IJLT                WAVFRST1.465    
c   using indices in klat / klon.                                          WAVFRST1.466    
c                                                                          WAVFRST1.467    
c   ALSO  note that array FL3 is the output from IMPLSCH with              WAVFRST1.468    
c   values at t+dt                                                         WAVFRST1.469    
c                                                                          WAVFRST1.470    
       n11=nstart -1 +ijs(ig)                                              WAVFRST1.471    
       n22=nstart -1 +ijl(ig)                                              WAVFRST1.472    
                                                                           WAVFRST1.473    
       do l=1,nfre                                                         WAVFRST1.474    
        do k=1,nang                                                        WAVFRST1.475    
c                                                                          WAVFRST1.476    
cc     pick out from point ijs in the block not from point 1               WAVFRST1.477    
c                                                                          WAVFRST1.478    
         ifill=0                                                           WAVFRST1.479    
         do ip=n11,n22                                                     WAVFRST1.480    
          energy(ip,k,l)=FL3(ifill+ijs(ig),k,l)                            WAVFRST1.481    
          ifill=ifill+1                                                    WAVFRST1.482    
         enddo                                                             WAVFRST1.483    
        enddo                                                              WAVFRST1.484    
       enddo                                                               WAVFRST1.485    
                                                                           WAVFRST1.486    
                                                                           WAVFRST1.487    
c                                                                          WAVFRST1.488    
c copy blocks of diagnostics into full array                               WAVFRST1.489    
c                                                                          WAVFRST1.490    
                                                                           WAVFRST1.491    
       if(len_s2.eq.niblo*nang*nfre.and.                                   WAVFRST1.492    
     &   len_sd.eq.mdata*nang*nfre) then                                   WAVFRST1.493    
c                                                                          WAVFRST1.494    
c       set istart to account for blocks already copied                    WAVFRST1.495    
c                                                                          WAVFRST1.496    
        istart=0                                                           WAVFRST1.497    
        if(ig.gt.1) then                                                   WAVFRST1.498    
         do ii=1,ig-1                                                      WAVFRST1.499    
          istart=istart + ijl(ii) - ijs(ii)+1                              WAVFRST1.500    
         enddo                                                             WAVFRST1.501    
        endif                                                              WAVFRST1.502    
                                                                           WAVFRST1.503    
        do l=1,nfre                                                        WAVFRST1.504    
         do m=1,nang                                                       WAVFRST1.505    
                                                                           WAVFRST1.506    
          nstar1=((l-1)*nang + m-1)*mdata + istart - ijs(ig) +1            WAVFRST1.507    
          nstar2=((l-1)*nang + m-1)*niblo                                  WAVFRST1.508    
                                                                           WAVFRST1.509    
          do ip=ijs(ig),ijl(ig)                                            WAVFRST1.510    
           if(nstar2+ip.gt.len_s2)then                                     WAVFRST1.511    
             WRITE(6,*)'error in nstar2 values:',len_s2,nstar2+ip          GIE0F403.680    
             icode=99                                                      WAVFRST1.513    
             cmessage='WAV_FOR_STEP error in nstar2'                       WAVFRST1.514    
             return                                                        WAVFRST1.515    
           endif                                                           WAVFRST1.516    
           if(nstar1+ip.gt.len_sd)then                                     WAVFRST1.517    
             WRITE(6,*)'error in nstar1 values:',len_sd,nstar1+ip          GIE0F403.681    
             icode=99                                                      WAVFRST1.519    
             cmessage='WAV_FOR_STEP error in nstar1'                       WAVFRST1.520    
             return                                                        WAVFRST1.521    
           endif                                                           WAVFRST1.522    
           sinp(nstar1+ip) = sin2(nstar2+ip)                               WAVFRST1.523    
           snl(nstar1+ip) = snl2(nstar2+ip)                                WAVFRST1.524    
           sds(nstar1+ip) = sds2(nstar2+ip)                                WAVFRST1.525    
           sbf(nstar1+ip) = sbf2(nstar2+ip)                                WAVFRST1.526    
           stl(nstar1+ip) = stl2(nstar2+ip)                                WAVFRST1.527    
           sadv(nstar1+ip)= sadv2(nstar2+ip)                               WAVFRST1.528    
          enddo                                                            WAVFRST1.529    
                                                                           WAVFRST1.530    
         enddo                                                             WAVFRST1.531    
        enddo                                                              WAVFRST1.532    
       endif                                                               WAVFRST1.533    
                                                                           WAVFRST1.534    
C*    BRANCHING BACK TO 1.5 FOR NEXT BLOCK OF LATITUDES                    WAVFRST1.535    
C                                                                          WAVFRST1.536    
C      update nstart for next block:                                       WAVFRST1.537    
c                                                                          WAVFRST1.538    
       nstart = nend - (ijlt(ig)-ijls(ig))                                 WAVFRST1.539    
c                                                                          WAVFRST1.540    
                                                                           WAVFRST1.541    
 1500 CONTINUE                                                             WAVFRST1.542    
C                                                                          WAVFRST1.543    
      RETURN                                                               WAVFRST1.544    
      END                                                                  WAVFRST1.545    
*ENDIF                                                                     WAVFRST1.546