/[MITgcm]/MITgcm/pkg/shap_filt/shap_filt_uv_s2.F
ViewVC logotype

Contents of /MITgcm/pkg/shap_filt/shap_filt_uv_s2.F

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


Revision 1.7 - (show annotations) (download)
Sun Aug 3 03:05:19 2003 UTC (20 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint51k_post, checkpoint52l_pre, hrcube4, hrcube5, checkpoint52d_pre, checkpoint52j_pre, checkpoint51o_pre, checkpoint51l_post, checkpoint52l_post, checkpoint52k_post, checkpoint53, checkpoint52, checkpoint52f_post, checkpoint51f_post, checkpoint51t_post, checkpoint51n_post, checkpoint52i_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint51s_post, checkpoint51j_post, checkpoint52e_pre, checkpoint52e_post, checkpoint51n_pre, checkpoint52b_pre, checkpoint51l_pre, checkpoint52m_post, checkpoint51q_post, checkpoint52b_post, checkpoint52c_post, checkpoint51h_pre, checkpoint52f_pre, checkpoint53c_post, branchpoint-genmake2, checkpoint51r_post, checkpoint51i_post, checkpoint53a_post, checkpoint52d_post, checkpoint52a_pre, checkpoint52i_post, checkpoint51i_pre, checkpoint52h_pre, checkpoint52j_post, branch-netcdf, checkpoint52n_post, checkpoint53b_pre, checkpoint51e_post, checkpoint51o_post, checkpoint51f_pre, checkpoint53b_post, checkpoint52a_post, checkpoint51g_post, ecco_c52_e35, checkpoint51m_post, checkpoint53d_pre, checkpoint51p_post, checkpoint51u_post
Branch point for: branch-genmake2, branch-nonh, tg2-branch, netcdf-sm0, checkpoint51n_branch
Changes since 1.6: +2 -2 lines
one step forward in making shap_filt independent from mom_vecinv.

1 C $Header: /u/gcmpack/MITgcm/pkg/shap_filt/shap_filt_uv_s2.F,v 1.6 2002/03/04 01:32:55 jmc Exp $
2 C $Name: $
3
4 #include "SHAP_FILT_OPTIONS.h"
5
6 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 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 C !INPUT/OUTPUT PARAMETERS:
33 C == Routine arguments
34 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 _RL myTime
47 INTEGER myThid
48
49 #ifdef ALLOW_SHAP_FILT
50
51 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 C !LOCAL VARIABLES:
62 C == Local variables ==
63 INTEGER bi,bj,k,i,j,N
64 _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 CEOP
70
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 DO K=1,kSize
76 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 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
100 DO bj=myByLo(myThid),myByHi(myThid)
101 DO bi=myBxLo(myThid),myBxHi(myThid)
102 DO K=1,kSize
103
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 CALL SHAP_FILT_RELVORT3(bi,bj,k,
112 I tmpFldU(1-OLx,1-OLy,k,bi,bj),
113 I tmpFldV(1-OLx,1-OLy,k,bi,bj),
114 & hFacZ,vort3,myThid)
115 ELSE
116 C- replace Physical calc Div & Vort by computational one :
117 DO J=0,sNy+1
118 DO I=0,sNx+1
119 hDiv(i,j)=tmpFldU(i+1,j,k,bi,bj)-tmpFldU(i,j,k,bi,bj)
120 & +tmpFldV(i,j+1,k,bi,bj)-tmpFldV(i,j,k,bi,bj)
121 ENDDO
122 ENDDO
123 DO J=1,sNy+1
124 DO I=1,sNx+1
125 vort3(i,j)=(tmpFldV(i,j,k,bi,bj)-tmpFldV(i-1,j,k,bi,bj)
126 & -tmpFldU(i,j,k,bi,bj)+tmpFldU(i,j-1,k,bi,bj)
127 & )
128 maskZ = (maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj))
129 & *(maskS(i,j,k,bi,bj)+maskS(i-1,j,k,bi,bj))
130 IF (maskZ.LT.1.) vort3(i,j)=0.
131 ENDDO
132 ENDDO
133
134 C Special stuff for Cubed Sphere
135 IF (useCubedSphereExchange) THEN
136 c---
137 I=1
138 J=1
139 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
140 & +maskS(i,j,k,bi,bj)
141 IF (maskZ.GE.2.) THEN
142 vort3(I,J)=
143 & tmpFldV(I,J,k,bi,bj)
144 & -tmpFldU(I,J,k,bi,bj)
145 & +tmpFldU(I,J-1,k,bi,bj)
146 vort3(I,J)=vort3(I,J)*4.d0/3.d0
147 ELSE
148 vort3(I,J)=0.
149 ENDIF
150 c---
151 I=sNx+1
152 J=1
153 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
154 & +maskS(i-1,j,k,bi,bj)
155 IF (maskZ.GE.2.) THEN
156 vort3(I,J)=
157 & -tmpFldV(I-1,J,k,bi,bj)
158 & -tmpFldU(I,J,k,bi,bj)
159 & +tmpFldU(I,J-1,k,bi,bj)
160 vort3(I,J)=vort3(I,J)*4.d0/3.d0
161 ELSE
162 vort3(I,J)=0.
163 ENDIF
164 c---
165 I=1
166 J=sNy+1
167 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
168 & +maskS(i,j,k,bi,bj)
169 IF (maskZ.GE.2.) THEN
170 vort3(I,J)=
171 & tmpFldV(I,J,k,bi,bj)
172 & -tmpFldU(I,J,k,bi,bj)
173 & +tmpFldU(I,J-1,k,bi,bj)
174 vort3(I,J)=vort3(I,J)*4.d0/3.d0
175 ELSE
176 vort3(I,J)=0.
177 ENDIF
178 c---
179 I=sNx+1
180 J=sNy+1
181 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
182 & +maskS(i-1,j,k,bi,bj)
183 IF (maskZ.GE.2.) THEN
184 vort3(I,J)=
185 & -tmpFldV(I-1,J,k,bi,bj)
186 & -tmpFldU(I,J,k,bi,bj)
187 & +tmpFldU(I,J-1,k,bi,bj)
188 vort3(I,J)=vort3(I,J)*4.d0/3.d0
189 ELSE
190 vort3(I,J)=0.
191 ENDIF
192 c---
193 ENDIF
194 ENDIF
195
196 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
197
198 IF (N.GT.nShapUV-nShapUVPhys) THEN
199 CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
200 CALL MOM_VI_DEL2UV(
201 I bi,bj,k,hDiv,vort3,hFacZ,
202 O tmpFldU(1-OLx,1-OLy,k,bi,bj),
203 O tmpFldV(1-OLx,1-OLy,k,bi,bj),
204 I myThid)
205 IF (Shap_uvLength.EQ.0.) THEN
206 DO J=1,sNy+1
207 DO I=1,sNx+1
208 tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
209 & *rAw(i,j,bi,bj)*_maskW(i,j,k,bi,bj)
210 tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
211 & *rAs(i,j,bi,bj)*_maskS(i,j,k,bi,bj)
212 ENDDO
213 ENDDO
214 ELSE
215 DO J=1,sNy+1
216 DO I=1,sNx+1
217 tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
218 & *Shap_uvLength*Shap_uvLength*_maskW(i,j,k,bi,bj)
219 tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
220 & *Shap_uvLength*Shap_uvLength*_maskS(i,j,k,bi,bj)
221 ENDDO
222 ENDDO
223 ENDIF
224 ELSE
225 DO J=1,sNy
226 DO I=1,sNx+1
227 tmpFldU(i,j,k,bi,bj) = -0.125*
228 & ( hDiv(i,j)-hDiv(i-1,j)
229 & -vort3(i,j+1)+vort3(i,j)
230 & )*maskW(i,j,k,bi,bj)
231 ENDDO
232 ENDDO
233 DO J=1,sNy+1
234 DO I=1,sNx
235 tmpFldV(i,j,k,bi,bj) = -0.125*
236 & ( vort3(i+1,j)-vort3(i,j)
237 & +hDiv(i,j)-hDiv(i,j-1)
238 & )*maskS(i,j,k,bi,bj)
239 ENDDO
240 ENDDO
241
242 ENDIF
243
244 ENDDO
245 ENDDO
246 ENDDO
247 C end loop N=1,nShapUV
248 ENDDO
249
250 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
251
252 C F <- [1 - (d_xx+d_yy)^n *deltaT/tau].F
253 DO bj=myByLo(myThid),myByHi(myThid)
254 DO bi=myBxLo(myThid),myBxHi(myThid)
255 DO K=1,kSize
256 DO J=1,sNy+1
257 DO I=1,sNx
258 uFld(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
259 & -tmpFldU(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
260 ENDDO
261 ENDDO
262 DO J=1,sNy+1
263 DO I=1,sNx
264 vFld(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
265 & -tmpFldV(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
266 ENDDO
267 ENDDO
268 ENDDO
269 ENDDO
270 ENDDO
271
272 IF (kSize.EQ.Nr) THEN
273 CALL EXCH_UV_XYZ_RL(uFld,vFld,.TRUE.,myThid)
274 ELSEIF (kSize.EQ.1) THEN
275 CALL EXCH_UV_XY_RL(uFld,vFld,.TRUE.,myThid)
276 ELSE
277 STOP 'S/R SHAP_FILT_UV_S2: kSize is wrong'
278 ENDIF
279
280 ENDIF
281 #endif /* ALLOW_SHAP_FILT */
282
283 RETURN
284 END

  ViewVC Help
Powered by ViewVC 1.1.22