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

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

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


Revision 1.3 - (hide annotations) (download)
Sun Feb 4 14:38:51 2001 UTC (23 years, 4 months ago) by cnh
Branch: MAIN
CVS Tags: pre38tag1, c37_adj, pre38-close, checkpoint37, checkpoint36, checkpoint35
Branch point for: pre38
Changes since 1.2: +2 -1 lines
Made sure each .F and .h file had
the CVS keywords Header and Name at its start.
Most had header but very few currently have Name, so
lots of changes!

1 cnh 1.3 C $Header: /u/gcmpack/models/MITgcmUV/pkg/zonal_filt/zonal_filter.F,v 1.2 2001/02/02 21:36:30 adcroft Exp $
2     C $Name: $
3 adcroft 1.2
4     #include "ZONAL_FILT_OPTIONS.h"
5    
6     SUBROUTINE ZONAL_FILTER(
7     U field, fieldMask,
8     I jMin, jMax, kMin, kMax, bi, bj, gridLoc, myThid )
9     C /==========================================================\
10     C | S/R ZONAL_FILTER |
11     C | o Apply FFT filter to a latitude circle. |
12     C \==========================================================/
13     IMPLICIT NONE
14    
15     C == Global data ==
16     #include "SIZE.h"
17     #include "ZONAL_FILT.h"
18     #include "FFTPACK.h"
19    
20     C == Routine arguments ==
21     C jMin - Range of points to filter
22     C jMax
23     C kMin
24     C kMax
25     C bi
26     C bj
27     C myThid - Thread number of this instance of FILTER_LATCIRC_FFT_APPLY
28     C field - Field to filter
29     C gridLoc - Orientation (U or V) of field.
30     INTEGER myThid
31     INTEGER gridLoc
32     Real*8 field(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
33     Real*8 fieldMask(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
34     INTEGER jMin, jMax, kMin, kMax, bi, bj
35    
36     #ifdef ALLOW_ZONAL_FILT
37    
38     C == Local data ==
39     Real*8 phi(Nx)
40     Real*8 phiMask(Nx)
41     Real*8 avPhi
42     INTEGER I, J, K
43    
44     DO k=kMin, kMax
45     DO j=jMin, jMax
46    
47     C o Copy zonal line of field into local workspace
48     DO i=1,sNx
49     phi(I) = field(i,j,k,bi,bj)
50     phiMask(I) = fieldMask(i,j,k,bi,bj)
51     ENDDO
52    
53     C Interpolate through land
54     CALL ZONAL_FILT_PRESMOOTH( phiMask,phi,avPhi,sNx,myThid )
55    
56     C o Forward transform (using specific FFT package)
57     C CALL R8FFTF( Nx, phi, FFTPACKWS(1,bj) )
58     CALL R8FFTF1( Nx, phi,
59     & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
60    
61     C o Apply amplitude filter and normalize
62     IF (gridLoc .EQ. 1) THEN
63     DO i=1, Nx
64     phi(i)=phi(i)*ampFactor(i,j,bi,bj)/float(Nx)
65     ENDDO
66     ELSEIF (gridLoc .EQ. 2) THEN
67     DO i=1, Nx
68     phi(i)=phi(i)*ampFactorV(i,j,bi,bj)/float(Nx)
69     ENDDO
70     ELSE
71     WRITE(0,*) 'Error: gridLoc = ',gridLoc
72     STOP 'Error: gridLoc has illegal value'
73     ENDIF
74    
75     C o Backward transform (using specific FFT package)
76     C CALL R8FFTB( Nx, phi, FFTPACKWS(1,bj) )
77     CALL R8FFTB1( Nx, phi,
78     & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
79    
80     C De-interpolate through land
81     CALL ZONAL_FILT_POSTSMOOTH(phiMask,phi,avPhi,sNx,myThid)
82    
83     C o Do periodic wrap around by hand
84     DO i=1-OLx,0
85     field(i,j,k,bi,bj) = phi(sNx+i)
86     ENDDO
87     DO i=1,sNx
88     field(i,j,k,bi,bj) = phi(I)
89     ENDDO
90     DO i=sNx+1,sNx+OLx
91     field(i,j,k,bi,bj) = phi(i-sNx)
92     ENDDO
93    
94     ENDDO
95     ENDDO
96    
97     #endif /* ALLOW_ZONAL_FILT */
98    
99     RETURN
100     END

  ViewVC Help
Powered by ViewVC 1.1.22