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

Contents 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.1 - (show annotations) (download)
Wed Jan 9 00:28:55 2002 UTC (22 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint44e_post, checkpoint44b_post, checkpoint43a-release1mods, release1-branch_tutorials, chkpt44a_pre, release1-branch-end, release1_final_v1, checkpoint44b_pre, checkpoint44, chkpt44d_post, chkpt44a_post, chkpt44c_post, checkpoint44e_pre, release1-branch_branchpoint, chkpt44c_pre
Branch point for: release1, release1_final, release1-branch
modified momentum_VI and Shapiro S/R :
 enable AIM to run on Cube Sphere with partial cell.

1 C $Header: /u/gcmpack/models/MITgcmUV/pkg/shap_filt/shap_filt_uv_s2.F,v 1.3 2001/06/15 15:14:56 jmc 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 c CALL MOM_VI_CALC_RELVORT3(bi,bj,k,
86 CALL SHAP_FILT_RELVORT3(bi,bj,k,
87 I tmpFldU(1-OLx,1-OLy,k,bi,bj),
88 I tmpFldV(1-OLx,1-OLy,k,bi,bj),
89 & hFacZ,vort3,myThid)
90 ELSE
91 C- replace Physical calc Div & Vort by computational one :
92 DO J=0,sNy+1
93 DO I=0,sNx+1
94 hDiv(i,j)=tmpFldU(i+1,j,k,bi,bj)-tmpFldU(i,j,k,bi,bj)
95 & +tmpFldV(i,j+1,k,bi,bj)-tmpFldV(i,j,k,bi,bj)
96 ENDDO
97 ENDDO
98 DO J=1,sNy+1
99 DO I=1,sNx+1
100 vort3(i,j)=(tmpFldV(i,j,k,bi,bj)-tmpFldV(i-1,j,k,bi,bj)
101 & -tmpFldU(i,j,k,bi,bj)+tmpFldU(i,j-1,k,bi,bj)
102 & )
103 maskZ = (maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj))
104 & *(maskS(i,j,k,bi,bj)+maskS(i-1,j,k,bi,bj))
105 IF (maskZ.LT.1.) vort3(i,j)=0.
106 ENDDO
107 ENDDO
108
109 C Special stuff for Cubed Sphere
110 IF (useCubedSphereExchange) THEN
111 c---
112 I=1
113 J=1
114 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
115 & +maskS(i,j,k,bi,bj)
116 IF (maskZ.GE.2.) THEN
117 vort3(I,J)=
118 & tmpFldV(I,J,k,bi,bj)
119 c & -tmpFldV(I-1,J,k,bi,bj)
120 & -tmpFldU(I,J,k,bi,bj)
121 & +tmpFldU(I,J-1,k,bi,bj)
122 vort3(I,J)=vort3(I,J)*4.d0/3.d0
123 ELSE
124 vort3(I,J)=0.
125 ENDIF
126 c---
127 I=sNx+1
128 J=1
129 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
130 & +maskS(i-1,j,k,bi,bj)
131 IF (maskZ.GE.2.) THEN
132 vort3(I,J)=
133 c & tmpFldV(I,J,k,bi,bj)
134 & -tmpFldV(I-1,J,k,bi,bj)
135 & -tmpFldU(I,J,k,bi,bj)
136 & +tmpFldU(I,J-1,k,bi,bj)
137 vort3(I,J)=vort3(I,J)*4.d0/3.d0
138 ELSE
139 vort3(I,J)=0.
140 ENDIF
141 c---
142 I=1
143 J=sNy+1
144 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
145 & +maskS(i,j,k,bi,bj)
146 IF (maskZ.GE.2.) THEN
147 vort3(I,J)=
148 & tmpFldV(I,J,k,bi,bj)
149 c & -tmpFldV(I-1,J,k,bi,bj)
150 & -tmpFldU(I,J,k,bi,bj)
151 & +tmpFldU(I,J-1,k,bi,bj)
152 vort3(I,J)=vort3(I,J)*4.d0/3.d0
153 ELSE
154 vort3(I,J)=0.
155 ENDIF
156 c---
157 I=sNx+1
158 J=sNy+1
159 maskZ = maskW(i,j,k,bi,bj)+maskW(i,j-1,k,bi,bj)
160 & +maskS(i-1,j,k,bi,bj)
161 IF (maskZ.GE.2.) THEN
162 vort3(I,J)=
163 c & tmpFldV(I,J,k,bi,bj)
164 & -tmpFldV(I-1,J,k,bi,bj)
165 & -tmpFldU(I,J,k,bi,bj)
166 & +tmpFldU(I,J-1,k,bi,bj)
167 vort3(I,J)=vort3(I,J)*4.d0/3.d0
168 ELSE
169 vort3(I,J)=0.
170 ENDIF
171 c---
172 ENDIF
173 ENDIF
174
175 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
176
177 IF (N.GT.nShapUV-nShapUVPhys) THEN
178 CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
179 CALL MOM_VI_DEL2UV(
180 I bi,bj,k,hDiv,vort3,hFacZ,
181 O tmpFldU(1-OLx,1-OLy,k,bi,bj),
182 O tmpFldV(1-OLx,1-OLy,k,bi,bj),
183 I myThid)
184 IF (Shap_uvLength.EQ.0.) THEN
185 DO J=1,sNy+1
186 DO I=1,sNx+1
187 tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
188 & *rAw(i,j,bi,bj)*_maskW(i,j,k,bi,bj)
189 tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
190 & *rAs(i,j,bi,bj)*_maskS(i,j,k,bi,bj)
191 ENDDO
192 ENDDO
193 ELSE
194 DO J=1,sNy+1
195 DO I=1,sNx+1
196 tmpFldU(i,j,k,bi,bj) = -0.125*tmpFldU(i,j,k,bi,bj)
197 & *Shap_uvLength*Shap_uvLength*_maskW(i,j,k,bi,bj)
198 tmpFldV(i,j,k,bi,bj) = -0.125*tmpFldV(i,j,k,bi,bj)
199 & *Shap_uvLength*Shap_uvLength*_maskS(i,j,k,bi,bj)
200 ENDDO
201 ENDDO
202 ENDIF
203 ELSE
204 DO J=1,sNy
205 DO I=1,sNx+1
206 tmpFldU(i,j,k,bi,bj) = -0.125*
207 & ( hDiv(i,j)-hDiv(i-1,j)
208 & -vort3(i,j+1)+vort3(i,j)
209 & )*maskW(i,j,k,bi,bj)
210 ENDDO
211 ENDDO
212 DO J=1,sNy+1
213 DO I=1,sNx
214 tmpFldV(i,j,k,bi,bj) = -0.125*
215 & ( vort3(i+1,j)-vort3(i,j)
216 & +hDiv(i,j)-hDiv(i,j-1)
217 & )*maskS(i,j,k,bi,bj)
218 ENDDO
219 ENDDO
220
221 ENDIF
222
223 ENDDO
224 ENDDO
225 ENDDO
226 C end loop N=1,nShapUV
227 ENDDO
228
229 c---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
230
231 C F <- [1 - (d_xx+d_yy)^n *deltat/tau].F
232 DO bj=myByLo(myThid),myByHi(myThid)
233 DO bi=myBxLo(myThid),myBxHi(myThid)
234 DO K=1,Nr
235 DO J=1,sNy+1
236 DO I=1,sNx
237 uFld(i,j,k,bi,bj)=uFld(i,j,k,bi,bj)
238 & -tmpFldU(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
239 ENDDO
240 ENDDO
241 DO J=1,sNy+1
242 DO I=1,sNx
243 vFld(i,j,k,bi,bj)=vFld(i,j,k,bi,bj)
244 & -tmpFldV(i,j,k,bi,bj)*deltaTmom/Shap_uvtau
245 ENDDO
246 ENDDO
247 ENDDO
248 ENDDO
249 ENDDO
250
251 CALL EXCH_UV_XYZ_RL(uFld,vFld,.TRUE.,myThid)
252
253 ENDIF
254 #endif /* ALLOW_SHAP_FILT */
255
256 RETURN
257 END

  ViewVC Help
Powered by ViewVC 1.1.22