/[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.5 - (show annotations) (download)
Fri Feb 8 21:37:05 2002 UTC (22 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint44e_post, chkpt44d_post, checkpoint44e_pre, release1_final_v1, chkpt44c_post
Branch point for: release1_final
Changes since 1.4: +39 -5 lines
apply mask to "vorticity" in computational mode filter.

1 C $Header: /u/gcmpack/MITgcm/pkg/shap_filt/shap_filt_uv_s2.F,v 1.4 2002/01/19 01:10:57 heimbach Exp $
2 C $Name: $
3
4 #include "SHAP_FILT_OPTIONS.h"
5
6 SUBROUTINE SHAP_FILT_UV_S2(
7 U uFld, vFld,
8 I myTime, myThid )
9 C /==========================================================\
10 C | S/R SHAP_FILT_UV_S2 |
11 C | Applies Shapiro filter to U,V field over one XY slice |
12 C | of one tile at a time. |
13 C \==========================================================/
14 IMPLICIT NONE
15
16 C == Global variables ===
17 #include "SIZE.h"
18 #include "EEPARAMS.h"
19 #include "PARAMS.h"
20 #include "GRID.h"
21 #include "SHAP_FILT.h"
22 #include "SHAP_FILT_UV.h"
23
24 C == Routine arguments
25 _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
26 _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
27 _RL myTime
28 INTEGER myThid
29
30 #ifdef ALLOW_SHAP_FILT
31 C------
32 C Combine computational Filter of Div & Vorticity
33 C and Physical Filter of U,V field
34 C nShapUVPhys = 0 ==> use only computational Filter
35 C nShapUVPhys = 1 ==> compute Div & Vort. with Grid factors,
36 C Filter Div & Vort. Numerically (power nShapUV-1)
37 C and return filtered U.V in physical space
38 C nShapUVPhys = nShapUV ==> Filter in Physical space only (power nShapUV)
39 C------
40
41 C == Local variables ==
42 INTEGER bi,bj,K,I,J,N
43 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
44 _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
45 _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
46 _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
47 _RS maskZ
48
49 IF (nShapUV.GT.0 .AND. Shap_uvtau.GT.0.) THEN
50
51 DO bj=myByLo(myThid),myByHi(myThid)
52 DO bi=myBxLo(myThid),myBxHi(myThid)
53 DO K=1,Nr
54 DO J=1-Oly,sNy+Oly
55 DO I=1-Olx,sNx+Olx
56 tmpFldU(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
57 & *_maskW(i,j,k,bi,bj)
58 tmpFldV(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
59 & *_maskS(i,j,k,bi,bj)
60 ENDDO
61 ENDDO
62 ENDDO
63 ENDDO
64 ENDDO
65
66 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
67
68 C [d_xx+d_yy]^n tmpFld
69
70 DO N=1,nShapUV
71
72 CALL EXCH_UV_XYZ_RL(tmpFldU,tmpFldV,.TRUE.,myThid)
73
74 DO bj=myByLo(myThid),myByHi(myThid)
75 DO bi=myBxLo(myThid),myBxHi(myThid)
76 DO K=1,Nr
77
78 C [d_xx+d_yy] tmpFld
79 IF (N.LE.nShapUVPhys) THEN
80 CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
81 CALL MOM_VI_CALC_HDIV(bi,bj,k,
82 I tmpFldU(1-OLx,1-OLy,k,bi,bj),
83 I tmpFldV(1-OLx,1-OLy,k,bi,bj),
84 & hDiv,myThid)
85 CALL MOM_VI_CALC_RELVORT3(bi,bj,k,
86 I tmpFldU(1-OLx,1-OLy,k,bi,bj),
87 I tmpFldV(1-OLx,1-OLy,k,bi,bj),
88 & hFacZ,vort3,myThid)
89 ELSE
90 C- replace Physical calc Div & Vort by computational one :
91 DO J=0,sNy+1
92 DO I=0,sNx+1
93 hDiv(i,j)=tmpFldU(i+1,j,k,bi,bj)-tmpFldU(i,j,k,bi,bj)
94 & +tmpFldV(i,j+1,k,bi,bj)-tmpFldV(i,j,k,bi,bj)
95 ENDDO
96 ENDDO
97 DO J=1,sNy+1
98 DO I=1,sNx+1
99 vort3(i,j)=(tmpFldV(i,j,k,bi,bj)-tmpFldV(i-1,j,k,bi,bj)
100 & -tmpFldU(i,j,k,bi,bj)+tmpFldU(i,j-1,k,bi,bj)
101 & )
102 maskZ = (maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj))
103 & *(maskS(i,j,k,bi,bj)+maskS(i-1,j,k,bi,bj))
104 IF (maskZ.LT.1.) vort3(i,j)=0.
105 ENDDO
106 ENDDO
107
108 C Special stuff for Cubed Sphere
109 IF (useCubedSphereExchange) THEN
110 c---
111 I=1
112 J=1
113 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
114 & +maskS(i,j,k,bi,bj)
115 IF (maskZ.GE.2.) THEN
116 vort3(I,J)=
117 & tmpFldV(I,J,k,bi,bj)
118 & -tmpFldU(I,J,k,bi,bj)
119 & +tmpFldU(I,J-1,k,bi,bj)
120 vort3(I,J)=vort3(I,J)*4.d0/3.d0
121 ELSE
122 vort3(I,J)=0.
123 ENDIF
124 c---
125 I=sNx+1
126 J=1
127 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
128 & +maskS(i-1,j,k,bi,bj)
129 IF (maskZ.GE.2.) THEN
130 vort3(I,J)=
131 & -tmpFldV(I-1,J,k,bi,bj)
132 & -tmpFldU(I,J,k,bi,bj)
133 & +tmpFldU(I,J-1,k,bi,bj)
134 vort3(I,J)=vort3(I,J)*4.d0/3.d0
135 ELSE
136 vort3(I,J)=0.
137 ENDIF
138 c---
139 I=1
140 J=sNy+1
141 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
142 & +maskS(i,j,k,bi,bj)
143 IF (maskZ.GE.2.) THEN
144 vort3(I,J)=
145 & tmpFldV(I,J,k,bi,bj)
146 & -tmpFldU(I,J,k,bi,bj)
147 & +tmpFldU(I,J-1,k,bi,bj)
148 vort3(I,J)=vort3(I,J)*4.d0/3.d0
149 ELSE
150 vort3(I,J)=0.
151 ENDIF
152 c---
153 I=sNx+1
154 J=sNy+1
155 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
156 & +maskS(i-1,j,k,bi,bj)
157 IF (maskZ.GE.2.) THEN
158 vort3(I,J)=
159 & -tmpFldV(I-1,J,k,bi,bj)
160 & -tmpFldU(I,J,k,bi,bj)
161 & +tmpFldU(I,J-1,k,bi,bj)
162 vort3(I,J)=vort3(I,J)*4.d0/3.d0
163 ELSE
164 vort3(I,J)=0.
165 ENDIF
166 c---
167 ENDIF
168 ENDIF
169
170 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
171
172 IF (N.GT.nShapUV-nShapUVPhys) THEN
173 CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
174 CALL MOM_VI_DEL2UV(
175 I bi,bj,k,hDiv,vort3,hFacZ,
176 O tmpFldU(1-OLx,1-OLy,k,bi,bj),
177 O tmpFldV(1-OLx,1-OLy,k,bi,bj),
178 I myThid)
179 IF (Shap_uvLength.EQ.0.) THEN
180 DO J=1,sNy+1
181 DO I=1,sNx+1
182 tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
183 & *rAw(i,j,bi,bj)*_maskW(i,j,k,bi,bj)
184 tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
185 & *rAs(i,j,bi,bj)*_maskS(i,j,k,bi,bj)
186 ENDDO
187 ENDDO
188 ELSE
189 DO J=1,sNy+1
190 DO I=1,sNx+1
191 tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
192 & *Shap_uvLength*Shap_uvLength*_maskW(i,j,k,bi,bj)
193 tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
194 & *Shap_uvLength*Shap_uvLength*_maskS(i,j,k,bi,bj)
195 ENDDO
196 ENDDO
197 ENDIF
198 ELSE
199 DO J=1,sNy
200 DO I=1,sNx+1
201 tmpFldU(i,j,k,bi,bj) = -0.125*
202 & ( hDiv(i,j)-hDiv(i-1,j)
203 & -vort3(i,j+1)+vort3(i,j)
204 & )*maskW(i,j,k,bi,bj)
205 ENDDO
206 ENDDO
207 DO J=1,sNy+1
208 DO I=1,sNx
209 tmpFldV(i,j,k,bi,bj) = -0.125*
210 & ( vort3(i+1,j)-vort3(i,j)
211 & +hDiv(i,j)-hDiv(i,j-1)
212 & )*maskS(i,j,k,bi,bj)
213 ENDDO
214 ENDDO
215
216 ENDIF
217
218 ENDDO
219 ENDDO
220 ENDDO
221 C end loop N=1,nShapUV
222 ENDDO
223
224 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
225
226 C F <- [1 - (d_xx+d_yy)^n *deltat/tau].F
227 DO bj=myByLo(myThid),myByHi(myThid)
228 DO bi=myBxLo(myThid),myBxHi(myThid)
229 DO K=1,Nr
230 DO J=1,sNy+1
231 DO I=1,sNx
232 uFld(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
233 & -tmpFldU(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
234 ENDDO
235 ENDDO
236 DO J=1,sNy+1
237 DO I=1,sNx
238 vFld(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
239 & -tmpFldV(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
240 ENDDO
241 ENDDO
242 ENDDO
243 ENDDO
244 ENDDO
245
246 CALL EXCH_UV_XYZ_RL(uFld,vFld,.TRUE.,myThid)
247
248 ENDIF
249 #endif /* ALLOW_SHAP_FILT */
250
251 RETURN
252 END

  ViewVC Help
Powered by ViewVC 1.1.22