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

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

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


Revision 1.7 - (show annotations) (download)
Sun Sep 27 23:13:58 2009 UTC (14 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62v, checkpoint62u, checkpoint62t, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint62c, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62a, checkpoint62g, checkpoint62f, checkpoint62e, checkpoint62d, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62w, checkpoint62z, checkpoint62y, checkpoint62x, checkpoint63g, checkpoint64, checkpoint65, checkpoint62, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint65o, checkpoint62b, checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint61w, checkpoint61z, checkpoint61x, checkpoint61y, HEAD
Changes since 1.6: +29 -23 lines
change ZONAL_FILTER S/R interface (allows to filter 2-D fields)

1 C $Header: /u/gcmpack/MITgcm/pkg/zonal_filt/zonal_filter.F,v 1.6 2009/09/02 19:22:07 jmc Exp $
2 C $Name: $
3
4 #include "ZONAL_FILT_OPTIONS.h"
5
6 CBOP 0
7 C !ROUTINE: ZONAL_FILTER
8
9 C !INTERFACE:
10 SUBROUTINE ZONAL_FILTER(
11 U field,
12 I fieldMask,
13 I jMin, jMax, kSize, bi, bj, gridLoc, myThid )
14
15 C !DESCRIPTION:
16 C *==========================================================*
17 C | S/R ZONAL_FILTER
18 C | o Apply FFT filter to a latitude circle.
19 C *==========================================================*
20
21 C !USES:
22 IMPLICIT NONE
23 C == Global data ==
24 #include "SIZE.h"
25 #include "EEPARAMS.h"
26 #include "PARAMS.h"
27 #include "GRID.h"
28 #include "ZONAL_FILT.h"
29 #include "FFTPACK.h"
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C jMin :: Range of points to filter
33 C jMax
34 C kSize :: Number of levels to filter
35 C bi, bj :: tile indices
36 C field :: Field to filter
37 C fieldMask :: mask corresponding to field to filter
38 C gridLoc :: Position on the grid (U or V) of field.
39 C myThid :: my Thread Id number
40 INTEGER kSize
41 _RL field (1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize)
42 _RS fieldMask(1-Olx:sNx+Olx,1-Oly:sNy+Oly,kSize)
43 INTEGER jMin, jMax, bi, bj
44 INTEGER gridLoc
45 INTEGER myThid
46 CEOP
47
48 #ifdef ALLOW_ZONAL_FILT
49
50 C !LOCAL VARIABLES:
51 Real*8 phi(Nx)
52 Real*8 phiMask(Nx)
53 Real*8 avPhi
54 INTEGER i, j, k
55
56 DO k= 1, kSize
57 DO j=jMin, jMax
58 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)
60 & .OR. zonal_filt_mode2dx.EQ.2 ) THEN
61
62 C o Copy zonal line of field into local workspace
63 DO i=1,sNx
64 phi(i) = field(i,j,k)
65 phiMask(i) = fieldMask(i,j,k)
66 ENDDO
67
68 C Interpolate through land
69 CALL ZONAL_FILT_PRESMOOTH( phiMask,phi,avPhi,sNx,myThid )
70
71 C o Forward transform (using specific FFT package)
72 C CALL R8FFTF( Nx, phi, FFTPACKWS(1,bj) )
73 CALL R8FFTF1( Nx, phi,
74 & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
75
76 C o Apply amplitude filter and normalize
77 IF (gridLoc .EQ. 1) THEN
78 DO i=1, Nx
79 phi(i)=phi(i)*ampFactor(i,j,bi,bj)/float(Nx)
80 ENDDO
81 ELSEIF (gridLoc .EQ. 2) THEN
82 DO i=1, Nx
83 phi(i)=phi(i)*ampFactorV(i,j,bi,bj)/float(Nx)
84 ENDDO
85 ELSE
86 WRITE(*,*) 'Error: gridLoc = ',gridLoc
87 STOP 'Error: gridLoc has illegal value'
88 ENDIF
89
90 C o Backward transform (using specific FFT package)
91 C CALL R8FFTB( Nx, phi, FFTPACKWS(1,bj) )
92 CALL R8FFTB1( Nx, phi,
93 & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
94
95 C De-interpolate through land
96 CALL ZONAL_FILT_POSTSMOOTH(phiMask,phi,avPhi,sNx,myThid)
97
98 C o Do periodic wrap around by hand
99 DO i=1-OLx,0
100 field(i,j,k) = phi(sNx+i)
101 ENDDO
102 DO i=1,sNx
103 field(i,j,k) = phi(i)
104 ENDDO
105 DO i=sNx+1,sNx+OLx
106 field(i,j,k) = phi(i-sNx)
107 ENDDO
108
109 ENDIF
110 ENDDO
111 ENDDO
112
113 #endif /* ALLOW_ZONAL_FILT */
114
115 RETURN
116 END

  ViewVC Help
Powered by ViewVC 1.1.22