/[MITgcm]/MITgcm/pkg/zonal_filt/zonal_filter.F
ViewVC logotype

Diff of /MITgcm/pkg/zonal_filt/zonal_filter.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.6 by jmc, Wed Sep 2 19:22:07 2009 UTC revision 1.7 by jmc, Sun Sep 27 23:13:58 2009 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "ZONAL_FILT_OPTIONS.h"  #include "ZONAL_FILT_OPTIONS.h"
5    
6    CBOP 0
7    C     !ROUTINE: ZONAL_FILTER
8    
9    C     !INTERFACE:
10        SUBROUTINE ZONAL_FILTER(        SUBROUTINE ZONAL_FILTER(
11       U           field,       U           field,
12       I           fieldMask,       I           fieldMask,
13       I           jMin, jMax, kMin, kMax, bi, bj, gridLoc, myThid )       I           jMin, jMax, kSize, bi, bj, gridLoc, myThid )
14    
15    C     !DESCRIPTION:
16  C     *==========================================================*  C     *==========================================================*
17  C     | S/R ZONAL_FILTER  C     | S/R ZONAL_FILTER
18  C     | o Apply FFT filter to a latitude circle.  C     | o Apply FFT filter to a latitude circle.
19  C     *==========================================================*  C     *==========================================================*
20    
21    C     !USES:
22        IMPLICIT NONE        IMPLICIT NONE
   
23  C     == Global data ==  C     == Global data ==
24  #include "SIZE.h"  #include "SIZE.h"
25  #include "EEPARAMS.h"  #include "EEPARAMS.h"
# Line 23  C     == Global data == Line 28  C     == Global data ==
28  #include "ZONAL_FILT.h"  #include "ZONAL_FILT.h"
29  #include "FFTPACK.h"  #include "FFTPACK.h"
30    
31  C     == Routine arguments ==  C     !INPUT/OUTPUT PARAMETERS:
32  C     jMin - Range of points to filter  C     jMin      :: Range of points to filter
33  C     jMax  C     jMax
34  C     kMin  C     kSize     :: Number of levels to filter
35  C     kMax  C     bi, bj    :: tile indices
36  C     bi  C     field     :: Field to filter
37  C     bj  C     fieldMask :: mask corresponding to field to filter
38  C     myThid  - Thread number of this instance of FILTER_LATCIRC_FFT_APPLY  C     gridLoc   :: Position on the grid (U or V) of field.
39  C     field   - Field to filter  C     myThid    :: my Thread Id number
40  C     gridLoc - Orientation (U or V) of field.        INTEGER kSize
41        _RL     field    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)        _RL     field    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize)
42        _RS     fieldMask(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)        _RS     fieldMask(1-Olx:sNx+Olx,1-Oly:sNy+Oly,kSize)
43        INTEGER jMin, jMax, kMin, kMax, bi, bj        INTEGER jMin, jMax, bi, bj
44        INTEGER gridLoc        INTEGER gridLoc
45        INTEGER myThid        INTEGER myThid
46    CEOP
47    
48  #ifdef ALLOW_ZONAL_FILT  #ifdef ALLOW_ZONAL_FILT
49    
50  C     == Local data ==  C     !LOCAL VARIABLES:
51        Real*8 phi(Nx)        Real*8 phi(Nx)
52        Real*8 phiMask(Nx)        Real*8 phiMask(Nx)
53        Real*8 avPhi        Real*8 avPhi
54        INTEGER I, J, K        INTEGER i, j, k
55    
56        DO k=kMin, kMax        DO k= 1, kSize
57         DO j=jMin, jMax         DO j=jMin, jMax
58          IF ( (gridLoc.EQ.1 .AND.ABS(yC(1,j,bi,bj)).GE.zonal_filt_lat)          IF ( (gridLoc.EQ.1 .AND.ABS(yC(1,j,bi,bj)).GE.zonal_filt_lat)
59       &   .OR.(gridLoc.EQ.2 .AND.ABS(yG(2,j,bi,bj)).GE.zonal_filt_lat)       &   .OR.(gridLoc.EQ.2 .AND.ABS(yG(2,j,bi,bj)).GE.zonal_filt_lat)
# Line 55  C     == Local data == Line 61  C     == Local data ==
61    
62  C     o Copy zonal line of field into local workspace  C     o Copy zonal line of field into local workspace
63          DO i=1,sNx          DO i=1,sNx
64           phi(I) = field(i,j,k,bi,bj)           phi(i) = field(i,j,k)
65           phiMask(I) = fieldMask(i,j,k,bi,bj)           phiMask(i) = fieldMask(i,j,k)
66          ENDDO          ENDDO
67    
68  C Interpolate through land  C Interpolate through land
# Line 91  C De-interpolate through land Line 97  C De-interpolate through land
97    
98  C       o Do periodic wrap around by hand  C       o Do periodic wrap around by hand
99          DO i=1-OLx,0          DO i=1-OLx,0
100           field(i,j,k,bi,bj) = phi(sNx+i)           field(i,j,k) = phi(sNx+i)
101          ENDDO          ENDDO
102          DO i=1,sNx          DO i=1,sNx
103           field(i,j,k,bi,bj) = phi(I)           field(i,j,k) = phi(i)
104          ENDDO          ENDDO
105          DO i=sNx+1,sNx+OLx          DO i=sNx+1,sNx+OLx
106           field(i,j,k,bi,bj) = phi(i-sNx)           field(i,j,k) = phi(i-sNx)
107          ENDDO          ENDDO
108    
109          ENDIF          ENDIF

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

  ViewVC Help
Powered by ViewVC 1.1.22