/[MITgcm]/MITgcm/verification/aim.5l_cs/code/shap_filt_uv_s2.F
ViewVC logotype

Annotation of /MITgcm/verification/aim.5l_cs/code/shap_filt_uv_s2.F

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


Revision 1.3 - (hide annotations) (download)
Sun Aug 3 03:40:27 2003 UTC (20 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -1 lines
FILE REMOVED
use the standard version of these S/R

1 jmc 1.3 C $Header: /u/gcmpack/MITgcm/verification/aim.5l_cs/code/shap_filt_uv_s2.F,v 1.2 2002/03/04 01:39:50 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "SHAP_FILT_OPTIONS.h"
5    
6 jmc 1.2 CBOP
7     C !ROUTINE: SHAP_FILT_UV_S2
8     C !INTERFACE:
9     SUBROUTINE SHAP_FILT_UV_S2(
10     U uFld, vFld, tmpFldU, tmpFldV,
11     I kSize, myTime, myThid )
12     C !DESCRIPTION: \bv
13     C *==========================================================*
14     C | S/R SHAP_FILT_UV_S2
15     C | o Applies Shapiro filter to velocity field (u & v).
16     C | o use filtering function "S2" = [1 - (d_xx+d_yy)^n]
17     C | o Options for computational filter (no grid spacing)
18     C | or physical space filter (with grid spacing) or both.
19     C *==========================================================*
20     C \ev
21    
22     C !USES:
23 jmc 1.1 IMPLICIT NONE
24    
25     C == Global variables ===
26     #include "SIZE.h"
27     #include "EEPARAMS.h"
28     #include "PARAMS.h"
29     #include "GRID.h"
30     #include "SHAP_FILT.h"
31    
32 jmc 1.2 C !INPUT/OUTPUT PARAMETERS:
33 jmc 1.1 C == Routine arguments
34 jmc 1.2 C uFld :: velocity field (U component) on which filter applies
35     C vFld :: velocity field (V component) on which filter applies
36     C tmpFldU :: working temporary array
37     C tmpFldV :: working temporary array
38     C kSize :: length of 3rd Dim : either =1 (2D field) or =Nr (3D field)
39     C myTime :: Current time in simulation
40     C myThid :: Thread number for this instance of SHAP_FILT_UV_S2
41     INTEGER kSize
42     _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
43     _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
44     _RL tmpFldU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
45     _RL tmpFldV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize,nSx,nSy)
46 jmc 1.1 _RL myTime
47     INTEGER myThid
48    
49     #ifdef ALLOW_SHAP_FILT
50 jmc 1.2
51 jmc 1.1 C------
52     C Combine computational Filter of Div & Vorticity
53     C and Physical Filter of U,V field
54     C nShapUVPhys = 0 ==> use only computational Filter
55     C nShapUVPhys = 1 ==> compute Div & Vort. with Grid factors,
56     C Filter Div & Vort. Numerically (power nShapUV-1)
57     C and return filtered U.V in physical space
58     C nShapUVPhys = nShapUV ==> Filter in Physical space only (power nShapUV)
59     C------
60    
61 jmc 1.2 C !LOCAL VARIABLES:
62 jmc 1.1 C == Local variables ==
63 jmc 1.2 INTEGER bi,bj,k,i,j,N
64 jmc 1.1 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
65     _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
66     _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
67     _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
68     _RS maskZ
69 jmc 1.2 CEOP
70 jmc 1.1
71     IF (nShapUV.GT.0 .AND. Shap_uvtau.GT.0.) THEN
72    
73     DO bj=myByLo(myThid),myByHi(myThid)
74     DO bi=myBxLo(myThid),myBxHi(myThid)
75 jmc 1.2 DO K=1,kSize
76 jmc 1.1 DO J=1-Oly,sNy+Oly
77     DO I=1-Olx,sNx+Olx
78     tmpFldU(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
79     & *_maskW(i,j,k,bi,bj)
80     tmpFldV(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
81     & *_maskS(i,j,k,bi,bj)
82     ENDDO
83     ENDDO
84     ENDDO
85     ENDDO
86     ENDDO
87    
88     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
89    
90     C [d_xx+d_yy]^n tmpFld
91    
92     DO N=1,nShapUV
93    
94 jmc 1.2 IF (kSize.EQ.Nr) THEN
95     CALL EXCH_UV_XYZ_RL(tmpFldU,tmpFldV,.TRUE.,myThid)
96     ELSE
97     CALL EXCH_UV_XY_RL(tmpFldU,tmpFldV,.TRUE.,myThid)
98     ENDIF
99 jmc 1.1
100     DO bj=myByLo(myThid),myByHi(myThid)
101     DO bi=myBxLo(myThid),myBxHi(myThid)
102 jmc 1.2 DO K=1,kSize
103 jmc 1.1
104     C [d_xx+d_yy] tmpFld
105     IF (N.LE.nShapUVPhys) THEN
106     CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
107     CALL MOM_VI_CALC_HDIV(bi,bj,k,
108     I tmpFldU(1-OLx,1-OLy,k,bi,bj),
109     I tmpFldV(1-OLx,1-OLy,k,bi,bj),
110     & hDiv,myThid)
111     c CALL MOM_VI_CALC_RELVORT3(bi,bj,k,
112     CALL SHAP_FILT_RELVORT3(bi,bj,k,
113     I tmpFldU(1-OLx,1-OLy,k,bi,bj),
114     I tmpFldV(1-OLx,1-OLy,k,bi,bj),
115     & hFacZ,vort3,myThid)
116     ELSE
117     C- replace Physical calc Div & Vort by computational one :
118     DO J=0,sNy+1
119     DO I=0,sNx+1
120     hDiv(i,j)=tmpFldU(i+1,j,k,bi,bj)-tmpFldU(i,j,k,bi,bj)
121     & +tmpFldV(i,j+1,k,bi,bj)-tmpFldV(i,j,k,bi,bj)
122     ENDDO
123     ENDDO
124     DO J=1,sNy+1
125     DO I=1,sNx+1
126     vort3(i,j)=(tmpFldV(i,j,k,bi,bj)-tmpFldV(i-1,j,k,bi,bj)
127     & -tmpFldU(i,j,k,bi,bj)+tmpFldU(i,j-1,k,bi,bj)
128     & )
129     maskZ = (maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj))
130     & *(maskS(i,j,k,bi,bj)+maskS(i-1,j,k,bi,bj))
131     IF (maskZ.LT.1.) vort3(i,j)=0.
132     ENDDO
133     ENDDO
134    
135     C Special stuff for Cubed Sphere
136     IF (useCubedSphereExchange) THEN
137     c---
138     I=1
139     J=1
140     maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
141     & +maskS(i,j,k,bi,bj)
142     IF (maskZ.GE.2.) THEN
143     vort3(I,J)=
144     & tmpFldV(I,J,k,bi,bj)
145     & -tmpFldU(I,J,k,bi,bj)
146     & +tmpFldU(I,J-1,k,bi,bj)
147     vort3(I,J)=vort3(I,J)*4.d0/3.d0
148     ELSE
149     vort3(I,J)=0.
150     ENDIF
151     c---
152     I=sNx+1
153     J=1
154     maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
155     & +maskS(i-1,j,k,bi,bj)
156     IF (maskZ.GE.2.) THEN
157     vort3(I,J)=
158     & -tmpFldV(I-1,J,k,bi,bj)
159     & -tmpFldU(I,J,k,bi,bj)
160     & +tmpFldU(I,J-1,k,bi,bj)
161     vort3(I,J)=vort3(I,J)*4.d0/3.d0
162     ELSE
163     vort3(I,J)=0.
164     ENDIF
165     c---
166     I=1
167     J=sNy+1
168     maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
169     & +maskS(i,j,k,bi,bj)
170     IF (maskZ.GE.2.) THEN
171     vort3(I,J)=
172     & tmpFldV(I,J,k,bi,bj)
173     & -tmpFldU(I,J,k,bi,bj)
174     & +tmpFldU(I,J-1,k,bi,bj)
175     vort3(I,J)=vort3(I,J)*4.d0/3.d0
176     ELSE
177     vort3(I,J)=0.
178     ENDIF
179     c---
180     I=sNx+1
181     J=sNy+1
182     maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
183     & +maskS(i-1,j,k,bi,bj)
184     IF (maskZ.GE.2.) THEN
185     vort3(I,J)=
186     & -tmpFldV(I-1,J,k,bi,bj)
187     & -tmpFldU(I,J,k,bi,bj)
188     & +tmpFldU(I,J-1,k,bi,bj)
189     vort3(I,J)=vort3(I,J)*4.d0/3.d0
190     ELSE
191     vort3(I,J)=0.
192     ENDIF
193     c---
194     ENDIF
195     ENDIF
196    
197     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
198    
199     IF (N.GT.nShapUV-nShapUVPhys) THEN
200     CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
201     CALL MOM_VI_DEL2UV(
202     I bi,bj,k,hDiv,vort3,hFacZ,
203     O tmpFldU(1-OLx,1-OLy,k,bi,bj),
204     O tmpFldV(1-OLx,1-OLy,k,bi,bj),
205     I myThid)
206     IF (Shap_uvLength.EQ.0.) THEN
207     DO J=1,sNy+1
208     DO I=1,sNx+1
209     tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
210     & *rAw(i,j,bi,bj)*_maskW(i,j,k,bi,bj)
211     tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
212     & *rAs(i,j,bi,bj)*_maskS(i,j,k,bi,bj)
213     ENDDO
214     ENDDO
215     ELSE
216     DO J=1,sNy+1
217     DO I=1,sNx+1
218     tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
219     & *Shap_uvLength*Shap_uvLength*_maskW(i,j,k,bi,bj)
220     tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
221     & *Shap_uvLength*Shap_uvLength*_maskS(i,j,k,bi,bj)
222     ENDDO
223     ENDDO
224     ENDIF
225     ELSE
226     DO J=1,sNy
227     DO I=1,sNx+1
228     tmpFldU(i,j,k,bi,bj) = -0.125*
229     & ( hDiv(i,j)-hDiv(i-1,j)
230     & -vort3(i,j+1)+vort3(i,j)
231     & )*maskW(i,j,k,bi,bj)
232     ENDDO
233     ENDDO
234     DO J=1,sNy+1
235     DO I=1,sNx
236     tmpFldV(i,j,k,bi,bj) = -0.125*
237     & ( vort3(i+1,j)-vort3(i,j)
238     & +hDiv(i,j)-hDiv(i,j-1)
239     & )*maskS(i,j,k,bi,bj)
240     ENDDO
241     ENDDO
242    
243     ENDIF
244    
245     ENDDO
246     ENDDO
247     ENDDO
248     C end loop N=1,nShapUV
249     ENDDO
250    
251     c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
252    
253 jmc 1.2 C F <- [1 - (d_xx+d_yy)^n *deltaT/tau].F
254 jmc 1.1 DO bj=myByLo(myThid),myByHi(myThid)
255     DO bi=myBxLo(myThid),myBxHi(myThid)
256 jmc 1.2 DO K=1,kSize
257 jmc 1.1 DO J=1,sNy+1
258     DO I=1,sNx
259     uFld(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
260     & -tmpFldU(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
261     ENDDO
262     ENDDO
263     DO J=1,sNy+1
264     DO I=1,sNx
265     vFld(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
266     & -tmpFldV(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
267     ENDDO
268     ENDDO
269     ENDDO
270     ENDDO
271     ENDDO
272    
273 jmc 1.2 IF (kSize.EQ.Nr) THEN
274     CALL EXCH_UV_XYZ_RL(uFld,vFld,.TRUE.,myThid)
275     ELSEIF (kSize.EQ.1) THEN
276     CALL EXCH_UV_XY_RL(uFld,vFld,.TRUE.,myThid)
277     ELSE
278     STOP 'S/R SHAP_FILT_UV_S2: kSize is wrong'
279     ENDIF
280 jmc 1.1
281     ENDIF
282     #endif /* ALLOW_SHAP_FILT */
283    
284     RETURN
285     END

  ViewVC Help
Powered by ViewVC 1.1.22