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

Annotation of /MITgcm/pkg/zonal_filt/zonal_filt_nofill.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, 3 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_filt_nofill.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_FILT_NOFILL(
7     U field,
8     I jMin, jMax, kMin, kMax, bi, bj, gridLoc, myThid )
9     C /==========================================================\
10     C | S/R ZONAL_FILT_NOFILL |
11     C | o Apply FFT filter to a latitude circle. |
12     C | *No fill* |
13     C \==========================================================/
14     IMPLICIT NONE
15    
16     C == Global data ==
17     #include "SIZE.h"
18     #include "ZONAL_FILT.h"
19     #include "FFTPACK.h"
20    
21     C == Routine arguments ==
22     C jMin - Range of points to filter
23     C jMax
24     C kMin
25     C kMax
26     C bi
27     C bj
28     C myThid - Thread number of this instance of FILTER_LATCIRC_FFT_APPLY
29     C field - Field to filter
30     C gridLoc - Orientation (U or V) of field.
31     INTEGER myThid
32     INTEGER gridLoc
33     C Real*8 field(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
34     Real*8 field(1-OLx:sNx+OLx,1-OLy:sNy+OLy,1,nSx,nSy)
35     INTEGER jMin, jMax, kMin, kMax, bi, bj
36    
37     #ifdef ALLOW_ZONAL_FILT
38    
39     C == Local data ==
40     Real*8 phi(Nx)
41     INTEGER I, J, K
42    
43     DO k=kMin, kMax
44     DO j=jMin, jMax
45    
46     C o Copy zonal line of field into local workspace
47     DO i=1,sNx
48     phi(I) = field(i,j,k,bi,bj)
49     ENDDO
50    
51     C o Forward transform (using specific FFT package)
52     C CALL R8FFTF( Nx, phi, FFTPACKWS(1,bj) )
53     CALL R8FFTF1( Nx, phi,
54     & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
55    
56     C o Apply amplitude filter and normalize
57     IF (gridLoc .EQ. 1) THEN
58     DO i=1, Nx
59     phi(i)=phi(i)*ampFactor(i,j,bi,bj)/float(Nx)
60     ENDDO
61     ELSEIF (gridLoc .EQ. 2) THEN
62     DO i=1, Nx
63     phi(i)=phi(i)*ampFactorV(i,j,bi,bj)/float(Nx)
64     ENDDO
65     ELSE
66     WRITE(0,*) 'Error: gridLoc = ',gridLoc
67     STOP 'Error: gridLoc has illegal value'
68     ENDIF
69    
70     C o Backward transform (using specific FFT package)
71     C CALL R8FFTB( Nx, phi, FFTPACKWS(1,bj) )
72     CALL R8FFTB1( Nx, phi,
73     & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
74    
75     C o Do periodic wrap around by hand
76     DO i=1-OLx,0
77     field(i,j,k,bi,bj) = phi(sNx+i)
78     ENDDO
79     DO i=1,sNx
80     field(i,j,k,bi,bj) = phi(I)
81     ENDDO
82     DO i=sNx+1,sNx+OLx
83     field(i,j,k,bi,bj) = phi(i-sNx)
84     ENDDO
85    
86     ENDDO
87     ENDDO
88    
89     #endif /* ALLOW_ZONAL_FILT */
90    
91     RETURN
92     END

  ViewVC Help
Powered by ViewVC 1.1.22