C $Header: /u/gcmpack/MITgcm/pkg/zonal_filt/zonal_filt_apply_uv.F,v 1.2 2009/09/27 23:14:44 jmc Exp $
C $Name: $
#include "ZONAL_FILT_OPTIONS.h"
CBOP 0
C !ROUTINE: ZONAL_FILT_APPLY_UV
C !INTERFACE:
SUBROUTINE ZONAL_FILT_APPLY_UV(
U uFld, vFld,
I myThid )
C !DESCRIPTION:
C *==========================================================*
C | S/R ZONAL_FILT_APPLY_UV
C | o Apply FFT filter to a latitude circle.
C *==========================================================*
C !USES:
IMPLICIT NONE
C == Global data ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
C !INPUT/OUTPUT PARAMETERS:
C myThid :: my Thread Id number
_RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
_RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
INTEGER myThid
CEOP
#ifdef ALLOW_ZONAL_FILT
C !LOCAL VARIABLES:
INTEGER bi,bj
INTEGER i, j, k
_RL uFlow(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
IF ( select_rStar.GT.0 ) THEN
DO k=1,Nr
C-- Loop on vertical index k
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
uFlow(i,j) = uFld(i,j,k,bi,bj)*hFacW(i,j,k,bi,bj)
ENDDO
ENDDO
CALL ZONAL_FILTER(
U uFlow,
I hFacW(1-OLx,1-OLy,k,bi,bj),
I 0, sNy+1, 1, bi, bj, 1, myThid )
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
uFld(i,j,k,bi,bj) = uFlow(i,j)*recip_hFacW(i,j,k,bi,bj)
ENDDO
ENDDO
C-- end of k loop
ENDDO
ELSE
CALL ZONAL_FILTER(
U uFld( 1-OLx,1-OLy,1,bi,bj),
I hFacW(1-OLx,1-OLy,1,bi,bj),
I 0, sNy+1, Nr, bi, bj, 1, myThid )
ENDIF
CALL ZONAL_FILTER(
U vFld( 1-OLx,1-OLy,1,bi,bj),
I hFacS(1-OLx,1-OLy,1,bi,bj),
I 0, sNy+1, Nr, bi, bj, 2, myThid )
ENDDO
ENDDO
#endif /* ALLOW_ZONAL_FILT */
RETURN
END