SUBROUTINE FKMEAN (F, IJS, IJL, EM, FM1, F1, AK, XK)

! ----------------------------------------------------------------------

!**** *FKMEAN* - COMPUTATION OF MEAN FREQUENCIES AT EACH GRID POINT
!                AND MEAN WAVE NUMBER (based in  sqrt(k)*F moment) .
!                COMPUTATION OF THE MEAN WAVE ENERGY WAS ALSO
!                ADDED SUCH THAT A CALL TO FKMEAN DOES NOT NEED
!                TO BE PRECEDED BY A CALL TO SEMEAN.


!*    PURPOSE.
!     --------

!       COMPUTE MEAN FREQUENCIES AND WAVE NUMBER AT EACH GRID POINT.

!**   INTERFACE.
!     ----------

!       *CALL* *FKMEAN (F, IJS, IJL, EM, FM1, F1, AK, XK)*
!              *F*   - SPECTRUM.
!              *IJS* - INDEX OF FIRST GRIDPOINT
!              *IJL* - INDEX OF LAST GRIDPOINT
!              *EM*  - MEAN WAVE ENERGY
!              *FM1* - MEAN WAVE FREQUENCY BASED ON (1/f)*F INTEGRATION
!              *F1*  - MEAN WAVE FREQUENCY BASED ON f*F INTEGRATION
!              *AK*  - MEAN WAVE NUMBER  BASED ON sqrt(1/k)*F INTGRATION
!                      ONLY FOR SHALLOW WATER RUNS.
!!!                    AK IS STILL NEEDED IN SNONLIN !!!!
!!!                    IF THE OLD FORMULATION IS USED.
!              *XK*  - MEAN WAVE NUMBER  BASED ON sqrt(k)*F INTEGRATION
!                      ONLY FOR SHALLOW WATER RUNS.

!     METHOD.
!     -------

!       NONE.

!     EXTERNALS.
!     ----------

!       NONE.

!     REFERENCE.
!     ----------

!       NONE.

! ----------------------------------------------------------------------

!      USE YOWFRED  , ONLY : FR       ,DFIM     ,DFIMOFR  ,DFFR     ,
!     &              DFFR2  ,DELTH    ,WETAIL   ,FRTAIL   ,WP1TAIL  ,
!     &              WP2TAIL
!      USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
!      USE YOWPARAM , ONLY : NANG     ,NFRE
!      USE YOWPCONS , ONLY : G        ,ZPI      ,EPSMIN
!      USE YOWSTAT  , ONLY : ISHALLO
!      USE YOWSHAL  , ONLY : TFAK     ,INDEP
       USE DATAPOOL, ONLY : FR, WETAIL, FRTAIL, WP1TAIL, ISHALLO, FRINTF, RKIND, &
     &                      DFIM, DFIMOFR, DFFR, DFFR2, WK, RKIND, &
     &                      DELTH => DDIR, LOUTWAM, &
     &                      G => G9, &
     &                      ZPI => PI2, &
     &                      EPSMIN => SMALL, &
     &                      NANG => MDC, &
     &                      NFRE => MSC, &
     &                      INDEP => DEP


! ----------------------------------------------------------------------

      IMPLICIT NONE

      INTEGER :: IJ,M,K,IJS,IJL
      REAL(rkind) :: DELT25, COEFM1, COEF1, COEFA, COEFX, SQRTK
      REAL(rkind) :: F(IJS:IJL,NANG,NFRE)
      REAL(rkind),DIMENSION(IJS:IJL) :: TEMPA, TEMPX,  TEMP2
      REAL(rkind),DIMENSION(IJS:IJL) :: EM, FM1, F1, AK, XK

!      REAL ZHOOK_HANDLE

!      IF (LHOOK) CALL DR_HOOK('FKMEAN',0,ZHOOK_HANDLE)
! ----------------------------------------------------------------------

!*    1. INITIALISE MEAN FREQUENCY ARRAY AND TAIL FACTOR.
!        ------------------------------------------------

      DO IJ=IJS,IJL
        EM(IJ) = EPSMIN
        FM1(IJ)= EPSMIN
        F1(IJ) = EPSMIN
        AK(IJ) = EPSMIN
        XK(IJ) = EPSMIN
      ENDDO

      DELT25 = WETAIL*FR(NFRE)*DELTH
      COEFM1 = FRTAIL*DELTH
      COEF1 = WP1TAIL*DELTH*FR(NFRE)**2
      COEFA = COEFM1*SQRT(G)/ZPI
      COEFX = COEF1*(ZPI/SQRT(G))

!      WRITE(111118,'(I10,F30.20)') ISHALLO, SUM(F)
!      WRITE(111118,'(5F20.9)')DELT25,COEFM1,COEF1,COEFA,COEFX

!*    2. INTEGRATE OVER FREQUENCIES AND DIRECTIONS.
!        ------------------------------------------

      IF (ISHALLO.EQ.1) THEN

!*    2.1 DEEP WATER INTEGRATION.
!         -----------------------

        DO M=1,NFRE
          K=1
          DO IJ=IJS,IJL
            TEMP2(IJ) = F(IJ,K,M)
          ENDDO
          DO K=2,NANG
            DO IJ=IJS,IJL
              TEMP2(IJ) = TEMP2(IJ)+F(IJ,K,M)
            ENDDO
          ENDDO
          DO IJ=IJS,IJL
            EM(IJ) = EM(IJ)+DFIM(M)*TEMP2(IJ)
            FM1(IJ)= FM1(IJ)+DFIMOFR(M)*TEMP2(IJ)
            F1(IJ) = F1(IJ)+DFFR(M)*TEMP2(IJ)
            !WRITE(111118,'(4F20.10)') EM(IJ), FM1(IJ), TEMP2(IJ)
          ENDDO
        ENDDO

      ELSE

!*    2.2 SHALLOW WATER INTEGRATION.
!         --------------------------

        DO M=1,NFRE
          DO IJ=IJS,IJL
!            SQRTK=SQRT(TFAK(INDEP(IJ),M))
            SQRTK=SQRT(WK(M,IJ))
            TEMPA(IJ) = DFIM(M)/SQRTK
            TEMPX(IJ) = SQRTK*DFIM(M)
          ENDDO
          K=1
          DO IJ=IJS,IJL
            TEMP2(IJ) = F(IJ,K,M) 
          ENDDO
          DO K=2,NANG
            DO IJ=IJS,IJL
              TEMP2(IJ) = TEMP2(IJ)+F(IJ,K,M)
            ENDDO
          ENDDO
          DO IJ=IJS,IJL
            EM(IJ) = EM(IJ)+DFIM(M)*TEMP2(IJ)
            FM1(IJ)= FM1(IJ)+DFIMOFR(M)*TEMP2(IJ)
            F1(IJ) = F1(IJ)+DFFR(M)*TEMP2(IJ)
            AK(IJ) = AK(IJ)+TEMPA(IJ)*TEMP2(IJ)
            XK(IJ) = XK(IJ)+TEMPX(IJ)*TEMP2(IJ)
            IF (LOUTWAM) WRITE(111118,'(4F20.10)') DFIM(M), DFIMOFR(M), DFFR(M)
          ENDDO
        ENDDO

      ENDIF

!*    3. ADD TAIL CORRECTION TO MEAN FREQUENCY AND
!*       NORMALIZE WITH TOTAL ENERGY.
!        ------------------------------------------

      IF (ISHALLO.EQ.1) THEN

        DO IJ=IJS,IJL
          EM(IJ) = EM(IJ)+DELT25*TEMP2(IJ)
          FM1(IJ)= FM1(IJ)+COEFM1*TEMP2(IJ)
          FM1(IJ)= EM(IJ)/FM1(IJ)
          F1(IJ) = F1(IJ)+COEF1*TEMP2(IJ)
          F1(IJ) = F1(IJ)/EM(IJ)
        ENDDO

      ELSE

        DO IJ=IJS,IJL
          EM(IJ) = EM(IJ)+DELT25*TEMP2(IJ)
          FM1(IJ) = FM1(IJ)+COEFM1*TEMP2(IJ)
          FM1(IJ) = EM(IJ)/FM1(IJ)
          F1(IJ) = F1(IJ)+COEF1*TEMP2(IJ)
          F1(IJ) = F1(IJ)/EM(IJ)
          AK(IJ) = AK(IJ)+COEFA*TEMP2(IJ)
          AK(IJ) = (EM(IJ)/AK(IJ))**2
          XK(IJ) = XK(IJ)+COEFX*TEMP2(IJ)
          XK(IJ) = (XK(IJ)/EM(IJ))**2
        ENDDO

        DO IJ=IJS,IJL
        IF (LOUTWAM)  WRITE(111118,'(4F20.10)') XK(IJ), AK(IJ), F1(IJ), EM(IJ)
        ENDDO

      ENDIF

      DO IJ=IJS,IJL
      IF (LOUTWAM)  WRITE(111118,'(4F20.10)') XK(IJ), AK(IJ), F1(IJ), EM(IJ)
      END DO

      
!      IF (LHOOK) CALL DR_HOOK('FKMEAN',1,ZHOOK_HANDLE)

      RETURN
      END SUBROUTINE FKMEAN