/[MITgcm]/MITgcm/pkg/mom_fluxform/mom_fluxform.F
ViewVC logotype

Annotation of /MITgcm/pkg/mom_fluxform/mom_fluxform.F

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


Revision 1.50 - (hide annotations) (download)
Wed Feb 12 00:45:56 2014 UTC (11 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64u
Changes since 1.49: +2 -2 lines
computes horiz. divergence, vorticity, tension and strain only if needed

1 jmc 1.50 C $Header: /u/gcmpack/MITgcm/pkg/mom_fluxform/mom_fluxform.F,v 1.49 2014/02/09 18:51:46 jmc Exp $
2 adcroft 1.2 C $Name: $
3 adcroft 1.1
4 adcroft 1.3 CBOI
5     C !TITLE: pkg/mom\_advdiff
6     C !AUTHORS: adcroft@mit.edu
7 adcroft 1.4 C !INTRODUCTION: Flux-form Momentum Equations Package
8 adcroft 1.3 C
9     C Package "mom\_fluxform" provides methods for calculating explicit terms
10     C in the momentum equation cast in flux-form:
11     C \begin{eqnarray*}
12     C G^u & = & -\frac{1}{\rho} \partial_x \phi_h
13     C -\nabla \cdot {\bf v} u
14     C -fv
15     C +\frac{1}{\rho} \nabla \cdot {\bf \tau}^x
16     C + \mbox{metrics}
17     C \\
18     C G^v & = & -\frac{1}{\rho} \partial_y \phi_h
19     C -\nabla \cdot {\bf v} v
20     C +fu
21     C +\frac{1}{\rho} \nabla \cdot {\bf \tau}^y
22     C + \mbox{metrics}
23     C \end{eqnarray*}
24     C where ${\bf v}=(u,v,w)$ and $\tau$, the stress tensor, includes surface
25     C stresses as well as internal viscous stresses.
26     CEOI
27    
28 edhill 1.13 #include "MOM_FLUXFORM_OPTIONS.h"
29 jmc 1.46 #ifdef ALLOW_MOM_COMMON
30     # include "MOM_COMMON_OPTIONS.h"
31     #endif
32 adcroft 1.1
33 adcroft 1.3 CBOP
34     C !ROUTINE: MOM_FLUXFORM
35    
36     C !INTERFACE: ==========================================================
37 jmc 1.37 SUBROUTINE MOM_FLUXFORM(
38 jmc 1.44 I bi,bj,k,iMin,iMax,jMin,jMax,
39 jmc 1.23 I KappaRU, KappaRV,
40 jmc 1.44 U fVerUkm, fVerVkm,
41     O fVerUkp, fVerVkp,
42 jmc 1.23 O guDiss, gvDiss,
43 jmc 1.44 I myTime, myIter, myThid )
44 adcroft 1.3
45     C !DESCRIPTION:
46     C Calculates all the horizontal accelerations except for the implicit surface
47 jmc 1.39 C pressure gradient and implicit vertical viscosity.
48 adcroft 1.1
49 adcroft 1.3 C !USES: ===============================================================
50 adcroft 1.1 C == Global variables ==
51 adcroft 1.3 IMPLICIT NONE
52 adcroft 1.1 #include "SIZE.h"
53     #include "EEPARAMS.h"
54     #include "PARAMS.h"
55     #include "GRID.h"
56 jmc 1.46 #include "DYNVARS.h"
57     #include "FFIELDS.h"
58 adcroft 1.1 #include "SURFACE.h"
59 jmc 1.46 #ifdef ALLOW_MOM_COMMON
60     # include "MOM_VISC.h"
61     #endif
62 jmc 1.37 #ifdef ALLOW_AUTODIFF_TAMC
63 heimbach 1.35 # include "tamc.h"
64     # include "tamc_keys.h"
65     # include "MOM_FLUXFORM.h"
66     #endif
67 adcroft 1.1
68 adcroft 1.3 C !INPUT PARAMETERS: ===================================================
69 jmc 1.44 C bi,bj :: current tile indices
70     C k :: current vertical level
71     C iMin,iMax,jMin,jMax :: loop ranges
72 adcroft 1.3 C KappaRU :: vertical viscosity
73     C KappaRV :: vertical viscosity
74 jmc 1.44 C fVerUkm :: vertical advective flux of U, interface above (k-1/2)
75     C fVerVkm :: vertical advective flux of V, interface above (k-1/2)
76     C fVerUkp :: vertical advective flux of U, interface below (k+1/2)
77     C fVerVkp :: vertical advective flux of V, interface below (k+1/2)
78 jmc 1.23 C guDiss :: dissipation tendency (all explicit terms), u component
79     C gvDiss :: dissipation tendency (all explicit terms), v component
80 jmc 1.8 C myTime :: current time
81 adcroft 1.3 C myIter :: current time-step number
82 jmc 1.44 C myThid :: my Thread Id number
83     INTEGER bi,bj,k
84     INTEGER iMin,iMax,jMin,jMax
85 adcroft 1.1 _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
86     _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
87 jmc 1.44 _RL fVerUkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
88     _RL fVerVkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
89     _RL fVerUkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
90     _RL fVerVkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
91 jmc 1.23 _RL guDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92     _RL gvDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
93 jmc 1.8 _RL myTime
94 adcroft 1.2 INTEGER myIter
95 adcroft 1.1 INTEGER myThid
96    
97 adcroft 1.3 C !OUTPUT PARAMETERS: ==================================================
98     C None - updates gU() and gV() in common blocks
99    
100     C !LOCAL VARIABLES: ====================================================
101     C i,j :: loop indices
102     C vF :: viscous flux
103     C v4F :: bi-harmonic viscous flux
104     C cF :: Coriolis acceleration
105     C mT :: Metric terms
106     C fZon :: zonal fluxes
107     C fMer :: meridional fluxes
108 jmc 1.44 C fVrUp,fVrDw :: vertical viscous fluxes at interface k & k+1
109 adcroft 1.3 INTEGER i,j
110 jmc 1.37 #ifdef ALLOW_AUTODIFF_TAMC
111 heimbach 1.35 INTEGER imomkey
112     #endif
113 adcroft 1.3 _RL vF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
114     _RL v4F(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
115     _RL cF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
116     _RL mT(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
117     _RL fZon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
118     _RL fMer(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
119 jmc 1.23 _RL fVrUp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
120     _RL fVrDw(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
121 jmc 1.33 C afFacMom :: Tracer parameters for turning terms on and off.
122 jmc 1.37 C vfFacMom
123     C pfFacMom afFacMom - Advective terms
124 adcroft 1.1 C cfFacMom vfFacMom - Eddy viscosity terms
125 jmc 1.33 C mtFacMom pfFacMom - Pressure terms
126 adcroft 1.1 C cfFacMom - Coriolis terms
127     C foFacMom - Forcing
128 jmc 1.33 C mtFacMom - Metric term
129 jmc 1.23 C uDudxFac, AhDudxFac, etc ... individual term parameters for switching terms off
130 adcroft 1.1 _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
131 jmc 1.49 _RS h0FacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
132 adcroft 1.1 _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
133     _RS xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
134     _RS yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
135     _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
136     _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
137     _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
138     _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
139 jmc 1.8 _RL rTransU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
140     _RL rTransV(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
141 adcroft 1.18 _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
142 baylor 1.25 _RL viscAh_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
143     _RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
144     _RL viscA4_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
145     _RL viscA4_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
146     _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
147     _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
148 adcroft 1.18 _RL strain(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
149     _RL tension(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
150 adcroft 1.1 _RL uDudxFac
151     _RL AhDudxFac
152     _RL vDudyFac
153     _RL AhDudyFac
154     _RL rVelDudrFac
155     _RL ArDudrFac
156     _RL fuFac
157     _RL mtFacU
158 jmc 1.33 _RL mtNHFacU
159 adcroft 1.1 _RL uDvdxFac
160     _RL AhDvdxFac
161     _RL vDvdyFac
162     _RL AhDvdyFac
163     _RL rVelDvdrFac
164     _RL ArDvdrFac
165     _RL fvFac
166     _RL mtFacV
167 jmc 1.33 _RL mtNHFacV
168 jmc 1.29 _RL sideMaskFac
169 jmc 1.46 LOGICAL bottomDragTerms
170 adcroft 1.3 CEOP
171 jmc 1.40 #ifdef MOM_BOUNDARY_CONSERVE
172     COMMON / MOM_FLUXFORM_LOCAL / uBnd, vBnd
173     _RL uBnd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
174     _RL vBnd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
175     #endif /* MOM_BOUNDARY_CONSERVE */
176 adcroft 1.1
177 heimbach 1.35 #ifdef ALLOW_AUTODIFF_TAMC
178     act0 = k - 1
179     max0 = Nr
180     act1 = bi - myBxLo(myThid)
181     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
182     act2 = bj - myByLo(myThid)
183     max2 = myByHi(myThid) - myByLo(myThid) + 1
184     act3 = myThid - 1
185     max3 = nTx*nTy
186     act4 = ikey_dynamics - 1
187 jmc 1.37 imomkey = (act0 + 1)
188 heimbach 1.35 & + act1*max0
189     & + act2*max0*max1
190     & + act3*max0*max1*max2
191     & + act4*max0*max1*max2*max3
192     #endif /* ALLOW_AUTODIFF_TAMC */
193    
194 adcroft 1.1 C Initialise intermediate terms
195 jmc 1.23 DO j=1-OLy,sNy+OLy
196     DO i=1-OLx,sNx+OLx
197 adcroft 1.1 vF(i,j) = 0.
198     v4F(i,j) = 0.
199     cF(i,j) = 0.
200     mT(i,j) = 0.
201     fZon(i,j) = 0.
202     fMer(i,j) = 0.
203 jmc 1.23 fVrUp(i,j)= 0.
204     fVrDw(i,j)= 0.
205     rTransU(i,j)= 0.
206     rTransV(i,j)= 0.
207 jmc 1.38 c KE(i,j) = 0.
208 heimbach 1.41 hDiv(i,j) = 0.
209 jmc 1.38 vort3(i,j) = 0.
210 adcroft 1.18 strain(i,j) = 0.
211 jmc 1.23 tension(i,j)= 0.
212     guDiss(i,j) = 0.
213     gvDiss(i,j) = 0.
214 adcroft 1.1 ENDDO
215     ENDDO
216    
217     C-- Term by term tracer parmeters
218     C o U momentum equation
219     uDudxFac = afFacMom*1.
220     AhDudxFac = vfFacMom*1.
221     vDudyFac = afFacMom*1.
222     AhDudyFac = vfFacMom*1.
223     rVelDudrFac = afFacMom*1.
224     ArDudrFac = vfFacMom*1.
225 jmc 1.33 mtFacU = mtFacMom*1.
226     mtNHFacU = 1.
227 adcroft 1.1 fuFac = cfFacMom*1.
228     C o V momentum equation
229     uDvdxFac = afFacMom*1.
230     AhDvdxFac = vfFacMom*1.
231     vDvdyFac = afFacMom*1.
232     AhDvdyFac = vfFacMom*1.
233     rVelDvdrFac = afFacMom*1.
234     ArDvdrFac = vfFacMom*1.
235 jmc 1.33 mtFacV = mtFacMom*1.
236     mtNHFacV = 1.
237 adcroft 1.1 fvFac = cfFacMom*1.
238 jmc 1.23
239     IF (implicitViscosity) THEN
240     ArDudrFac = 0.
241     ArDvdrFac = 0.
242     ENDIF
243 adcroft 1.1
244 jmc 1.29 C note: using standard stencil (no mask) results in under-estimating
245     C vorticity at a no-slip boundary by a factor of 2 = sideDragFactor
246     IF ( no_slip_sides ) THEN
247     sideMaskFac = sideDragFactor
248     ELSE
249     sideMaskFac = 0. _d 0
250     ENDIF
251    
252 adcroft 1.1 IF ( no_slip_bottom
253     & .OR. bottomDragQuadratic.NE.0.
254     & .OR. bottomDragLinear.NE.0.) THEN
255     bottomDragTerms=.TRUE.
256     ELSE
257     bottomDragTerms=.FALSE.
258     ENDIF
259    
260     C-- Calculate open water fraction at vorticity points
261 jmc 1.49 CALL MOM_CALC_HFACZ( bi,bj,k,hFacZ,r_hFacZ,myThid )
262 adcroft 1.1
263     C---- Calculate common quantities used in both U and V equations
264     C Calculate tracer cell face open areas
265     DO j=1-OLy,sNy+OLy
266     DO i=1-OLx,sNx+OLx
267 jmc 1.39 xA(i,j) = _dyG(i,j,bi,bj)*deepFacC(k)
268     & *drF(k)*_hFacW(i,j,k,bi,bj)
269     yA(i,j) = _dxG(i,j,bi,bj)*deepFacC(k)
270     & *drF(k)*_hFacS(i,j,k,bi,bj)
271 jmc 1.49 h0FacZ(i,j) = hFacZ(i,j)
272 adcroft 1.1 ENDDO
273     ENDDO
274 jmc 1.49 #ifdef NONLIN_FRSURF
275     IF ( momViscosity .AND. no_slip_sides
276     & .AND. nonlinFreeSurf.GT.0 ) THEN
277     DO j=2-OLy,sNy+OLy
278     DO i=2-OLx,sNx+OLx
279     h0FacZ(i,j) = MIN(
280     & MIN( h0FacW(i,j,k,bi,bj), h0FacW(i,j-1,k,bi,bj) ),
281     & MIN( h0FacS(i,j,k,bi,bj), h0FacS(i-1,j,k,bi,bj) ) )
282     ENDDO
283     ENDDO
284     ENDIF
285     #endif /* NONLIN_FRSURF */
286 adcroft 1.1
287     C Make local copies of horizontal flow field
288     DO j=1-OLy,sNy+OLy
289     DO i=1-OLx,sNx+OLx
290     uFld(i,j) = uVel(i,j,k,bi,bj)
291     vFld(i,j) = vVel(i,j,k,bi,bj)
292     ENDDO
293     ENDDO
294    
295     C Calculate velocity field "volume transports" through tracer cell faces.
296 jmc 1.39 C anelastic: transports are scaled by rhoFacC (~ mass transport)
297 adcroft 1.1 DO j=1-OLy,sNy+OLy
298     DO i=1-OLx,sNx+OLx
299 jmc 1.39 uTrans(i,j) = uFld(i,j)*xA(i,j)*rhoFacC(k)
300     vTrans(i,j) = vFld(i,j)*yA(i,j)*rhoFacC(k)
301 adcroft 1.1 ENDDO
302     ENDDO
303    
304 jmc 1.49 CALL MOM_CALC_KE( bi,bj,k,2,uFld,vFld,KE,myThid )
305 jmc 1.50 IF ( useVariableVisc ) THEN
306 jmc 1.49 CALL MOM_CALC_HDIV( bi,bj,k,2,uFld,vFld,hDiv,myThid )
307     CALL MOM_CALC_RELVORT3( bi,bj,k,uFld,vFld,hFacZ,vort3,myThid )
308     CALL MOM_CALC_TENSION( bi,bj,k,uFld,vFld,tension,myThid )
309     CALL MOM_CALC_STRAIN( bi,bj,k,uFld,vFld,hFacZ,strain,myThid )
310 jmc 1.43 DO j=1-OLy,sNy+OLy
311     DO i=1-OLx,sNx+OLx
312 jmc 1.29 IF ( hFacZ(i,j).EQ.0. ) THEN
313     vort3(i,j) = sideMaskFac*vort3(i,j)
314     strain(i,j) = sideMaskFac*strain(i,j)
315     ENDIF
316     ENDDO
317     ENDDO
318     #ifdef ALLOW_DIAGNOSTICS
319     IF ( useDiagnostics ) THEN
320     CALL DIAGNOSTICS_FILL(hDiv, 'momHDiv ',k,1,2,bi,bj,myThid)
321     CALL DIAGNOSTICS_FILL(vort3, 'momVort3',k,1,2,bi,bj,myThid)
322     CALL DIAGNOSTICS_FILL(tension,'Tension ',k,1,2,bi,bj,myThid)
323     CALL DIAGNOSTICS_FILL(strain, 'Strain ',k,1,2,bi,bj,myThid)
324     ENDIF
325     #endif
326     ENDIF
327 adcroft 1.18
328 jmc 1.44 C--- First call (k=1): compute vertical adv. flux fVerUkm & fVerVkm
329 jmc 1.8 IF (momAdvection.AND.k.EQ.1) THEN
330    
331 jmc 1.40 #ifdef MOM_BOUNDARY_CONSERVE
332     CALL MOM_UV_BOUNDARY( bi, bj, k,
333     I uVel, vVel,
334     O uBnd(1-OLx,1-OLy,k,bi,bj),
335     O vBnd(1-OLx,1-OLy,k,bi,bj),
336     I myTime, myIter, myThid )
337     #endif /* MOM_BOUNDARY_CONSERVE */
338    
339 jmc 1.8 C- Calculate vertical transports above U & V points (West & South face):
340 heimbach 1.35
341     #ifdef ALLOW_AUTODIFF_TAMC
342 heimbach 1.36 # ifdef NONLIN_FRSURF
343     # ifndef DISABLE_RSTAR_CODE
344 jmc 1.39 CADJ STORE dwtransc(:,:,bi,bj) =
345 heimbach 1.35 CADJ & comlev1_bibj_k, key = imomkey, byte = isbyte
346 jmc 1.39 CADJ STORE dwtransu(:,:,bi,bj) =
347 heimbach 1.35 CADJ & comlev1_bibj_k, key = imomkey, byte = isbyte
348 jmc 1.39 CADJ STORE dwtransv(:,:,bi,bj) =
349 heimbach 1.35 CADJ & comlev1_bibj_k, key = imomkey, byte = isbyte
350 heimbach 1.36 # endif
351     # endif /* NONLIN_FRSURF */
352 heimbach 1.35 #endif /* ALLOW_AUTODIFF_TAMC */
353 jmc 1.23 CALL MOM_CALC_RTRANS( k, bi, bj,
354     O rTransU, rTransV,
355 jmc 1.49 I myTime, myIter, myThid )
356 jmc 1.8
357     C- Free surface correction term (flux at k=1)
358 jmc 1.23 CALL MOM_U_ADV_WU( bi,bj,k,uVel,wVel,rTransU,
359 jmc 1.44 O fVerUkm, myThid )
360 jmc 1.8
361 jmc 1.23 CALL MOM_V_ADV_WV( bi,bj,k,vVel,wVel,rTransV,
362 jmc 1.44 O fVerVkm, myThid )
363 jmc 1.8
364     C--- endif momAdvection & k=1
365     ENDIF
366    
367     C--- Calculate vertical transports (at k+1) below U & V points :
368     IF (momAdvection) THEN
369 jmc 1.23 CALL MOM_CALC_RTRANS( k+1, bi, bj,
370     O rTransU, rTransV,
371 jmc 1.49 I myTime, myIter, myThid )
372 jmc 1.8 ENDIF
373    
374 jmc 1.40 #ifdef MOM_BOUNDARY_CONSERVE
375     IF ( momAdvection .AND. k.LT.Nr ) THEN
376     CALL MOM_UV_BOUNDARY( bi, bj, k+1,
377     I uVel, vVel,
378     O uBnd(1-OLx,1-OLy,k+1,bi,bj),
379     O vBnd(1-OLx,1-OLy,k+1,bi,bj),
380     I myTime, myIter, myThid )
381     ENDIF
382     #endif /* MOM_BOUNDARY_CONSERVE */
383    
384 baylor 1.25 IF (momViscosity) THEN
385 jmc 1.47 DO j=1-OLy,sNy+OLy
386     DO i=1-OLx,sNx+OLx
387     viscAh_D(i,j) = viscAhD
388     viscAh_Z(i,j) = viscAhZ
389     viscA4_D(i,j) = viscA4D
390     viscA4_Z(i,j) = viscA4Z
391     ENDDO
392     ENDDO
393     IF ( useVariableVisc ) THEN
394     CALL MOM_CALC_VISC( bi, bj, k,
395     O viscAh_Z, viscAh_D, viscA4_Z, viscA4_D,
396     I hDiv, vort3, tension, strain, KE, hFacZ,
397     I myThid )
398     ENDIF
399 baylor 1.25 ENDIF
400 jmc 1.8
401 jmc 1.23 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
402    
403 adcroft 1.1 C---- Zonal momentum equation starts here
404    
405 jmc 1.23 IF (momAdvection) THEN
406     C--- Calculate mean fluxes (advection) between cells for zonal flow.
407 adcroft 1.1
408 jmc 1.40 #ifdef MOM_BOUNDARY_CONSERVE
409     CALL MOM_U_ADV_UU( bi,bj,k,uTrans,uBnd(1-OLx,1-OLy,k,bi,bj),
410     O fZon,myThid )
411     CALL MOM_U_ADV_VU( bi,bj,k,vTrans,uBnd(1-OLx,1-OLy,k,bi,bj),
412     O fMer,myThid )
413     CALL MOM_U_ADV_WU(
414     I bi,bj,k+1,uBnd,wVel,rTransU,
415 jmc 1.44 O fVerUkp, myThid )
416 jmc 1.40 #else /* MOM_BOUNDARY_CONSERVE */
417 adcroft 1.1 C-- Zonal flux (fZon is at east face of "u" cell)
418 jmc 1.23 C Mean flow component of zonal flux -> fZon
419 jmc 1.49 CALL MOM_U_ADV_UU( bi,bj,k,uTrans,uFld,fZon,myThid )
420 adcroft 1.1
421     C-- Meridional flux (fMer is at south face of "u" cell)
422 jmc 1.23 C Mean flow component of meridional flux -> fMer
423 jmc 1.49 CALL MOM_U_ADV_VU( bi,bj,k,vTrans,uFld,fMer,myThid )
424 adcroft 1.1
425     C-- Vertical flux (fVer is at upper face of "u" cell)
426 jmc 1.23 C Mean flow component of vertical flux (at k+1) -> fVer
427     CALL MOM_U_ADV_WU(
428     I bi,bj,k+1,uVel,wVel,rTransU,
429 jmc 1.44 O fVerUkp, myThid )
430 jmc 1.40 #endif /* MOM_BOUNDARY_CONSERVE */
431 adcroft 1.1
432     C-- Tendency is minus divergence of the fluxes + coriolis + pressure term
433 jmc 1.23 DO j=jMin,jMax
434     DO i=iMin,iMax
435     gU(i,j,k,bi,bj) =
436 adcroft 1.1 #ifdef OLD_UV_GEOM
437 jmc 1.23 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)/
438     & ( 0.5 _d 0*(rA(i,j,bi,bj)+rA(i-1,j,bi,bj)) )
439 adcroft 1.1 #else
440 jmc 1.23 & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
441 jmc 1.39 & *recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
442 adcroft 1.1 #endif
443 jmc 1.44 & *( ( fZon(i,j ) - fZon(i-1,j) )*uDudxFac
444     & +( fMer(i,j+1) - fMer(i, j) )*vDudyFac
445     & +( fVerUkp(i,j) - fVerUkm(i,j) )*rkSign*rVelDudrFac
446 jmc 1.23 & )
447     ENDDO
448     ENDDO
449 adcroft 1.1
450 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
451     IF ( useDiagnostics ) THEN
452 jmc 1.44 CALL DIAGNOSTICS_FILL( fZon, 'ADVx_Um ',k,1,2,bi,bj,myThid)
453     CALL DIAGNOSTICS_FILL( fMer, 'ADVy_Um ',k,1,2,bi,bj,myThid)
454     CALL DIAGNOSTICS_FILL(fVerUkm,'ADVrE_Um',k,1,2,bi,bj,myThid)
455 jmc 1.24 ENDIF
456     #endif
457    
458 jmc 1.8 #ifdef NONLIN_FRSURF
459     C-- account for 3.D divergence of the flow in rStar coordinate:
460 heimbach 1.31 # ifndef DISABLE_RSTAR_CODE
461 jmc 1.23 IF ( select_rStar.GT.0 ) THEN
462     DO j=jMin,jMax
463     DO i=iMin,iMax
464     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
465 jmc 1.8 & - (rStarExpW(i,j,bi,bj) - 1. _d 0)/deltaTfreesurf
466     & *uVel(i,j,k,bi,bj)
467 jmc 1.23 ENDDO
468     ENDDO
469     ENDIF
470     IF ( select_rStar.LT.0 ) THEN
471     DO j=jMin,jMax
472     DO i=iMin,iMax
473     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
474     & - rStarDhWDt(i,j,bi,bj)*uVel(i,j,k,bi,bj)
475     ENDDO
476     ENDDO
477     ENDIF
478 heimbach 1.31 # endif /* DISABLE_RSTAR_CODE */
479 jmc 1.23 #endif /* NONLIN_FRSURF */
480    
481 jmc 1.43 #ifdef ALLOW_ADDFLUID
482     IF ( selectAddFluid.GE.1 ) THEN
483     DO j=jMin,jMax
484     DO i=iMin,iMax
485     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
486     & + uVel(i,j,k,bi,bj)*mass2rUnit*0.5 _d 0
487     & *( addMass(i-1,j,k,bi,bj) + addMass(i,j,k,bi,bj) )
488     & *_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)*recip_rhoFacC(k)
489     & * recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)
490     ENDDO
491     ENDDO
492     ENDIF
493     #endif /* ALLOW_ADDFLUID */
494    
495 jmc 1.23 ELSE
496     C- if momAdvection / else
497     DO j=1-OLy,sNy+OLy
498     DO i=1-OLx,sNx+OLx
499     gU(i,j,k,bi,bj) = 0. _d 0
500     ENDDO
501 jmc 1.8 ENDDO
502 jmc 1.23
503     C- endif momAdvection.
504 jmc 1.8 ENDIF
505 jmc 1.23
506     IF (momViscosity) THEN
507     C--- Calculate eddy fluxes (dissipation) between cells for zonal flow.
508    
509     C Bi-harmonic term del^2 U -> v4F
510 jmc 1.46 IF ( useBiharmonicVisc )
511 jmc 1.49 & CALL MOM_U_DEL2U( bi, bj, k, uFld, hFacZ, h0FacZ,
512     O v4f, myThid )
513 jmc 1.23
514     C Laplacian and bi-harmonic terms, Zonal Fluxes -> fZon
515 jmc 1.49 CALL MOM_U_XVISCFLUX( bi,bj,k,uFld,v4F,fZon,
516     I viscAh_D,viscA4_D,myThid )
517 jmc 1.23
518     C Laplacian and bi-harmonic termis, Merid Fluxes -> fMer
519 jmc 1.49 CALL MOM_U_YVISCFLUX( bi,bj,k,uFld,v4F,hFacZ,fMer,
520     I viscAh_Z,viscA4_Z,myThid )
521 jmc 1.23
522     C Eddy component of vertical flux (interior component only) -> fVrUp & fVrDw
523     IF (.NOT.implicitViscosity) THEN
524 jmc 1.49 CALL MOM_U_RVISCFLUX( bi,bj, k, uVel,KappaRU,fVrUp,myThid )
525     CALL MOM_U_RVISCFLUX( bi,bj,k+1,uVel,KappaRU,fVrDw,myThid )
526 jmc 1.23 ENDIF
527    
528     C-- Tendency is minus divergence of the fluxes
529 jmc 1.39 C anelastic: hor.visc.fluxes are not scaled by rhoFac (by vert.visc.flx is)
530 jmc 1.23 DO j=jMin,jMax
531     DO i=iMin,iMax
532     guDiss(i,j) =
533     #ifdef OLD_UV_GEOM
534     & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)/
535     & ( 0.5 _d 0*(rA(i,j,bi,bj)+rA(i-1,j,bi,bj)) )
536     #else
537     & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
538 jmc 1.39 & *recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)
539 jmc 1.23 #endif
540 jmc 1.39 & *( ( fZon(i,j ) - fZon(i-1,j) )*AhDudxFac
541     & +( fMer(i,j+1) - fMer(i, j) )*AhDudyFac
542     & +( fVrDw(i,j) - fVrUp(i,j) )*rkSign*ArDudrFac
543     & *recip_rhoFacC(k)
544 jmc 1.23 & )
545     ENDDO
546 jmc 1.8 ENDDO
547    
548 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
549     IF ( useDiagnostics ) THEN
550     CALL DIAGNOSTICS_FILL(fZon, 'VISCx_Um',k,1,2,bi,bj,myThid)
551     CALL DIAGNOSTICS_FILL(fMer, 'VISCy_Um',k,1,2,bi,bj,myThid)
552     IF (.NOT.implicitViscosity)
553     & CALL DIAGNOSTICS_FILL(fVrUp,'VISrE_Um',k,1,2,bi,bj,myThid)
554     ENDIF
555     #endif
556    
557 jmc 1.37 C-- No-slip and drag BCs appear as body forces in cell abutting topography
558 jmc 1.23 IF (no_slip_sides) THEN
559 adcroft 1.1 C- No-slip BCs impose a drag at walls...
560 jmc 1.46 CALL MOM_U_SIDEDRAG( bi, bj, k,
561 jmc 1.49 I uFld, v4f, h0FacZ,
562 jmc 1.46 I viscAh_Z, viscA4_Z,
563     I useHarmonicVisc, useBiharmonicVisc, useVariableVisc,
564 baylor 1.27 O vF,
565 jmc 1.46 I myThid )
566 jmc 1.23 DO j=jMin,jMax
567     DO i=iMin,iMax
568     gUdiss(i,j) = gUdiss(i,j) + vF(i,j)
569     ENDDO
570     ENDDO
571     ENDIF
572 adcroft 1.1 C- No-slip BCs impose a drag at bottom
573 jmc 1.23 IF (bottomDragTerms) THEN
574 jmc 1.49 CALL MOM_U_BOTTOMDRAG( bi,bj,k,uFld,KE,KappaRU,vF,myThid )
575 jmc 1.23 DO j=jMin,jMax
576     DO i=iMin,iMax
577     gUdiss(i,j) = gUdiss(i,j) + vF(i,j)
578     ENDDO
579     ENDDO
580     ENDIF
581    
582 mlosch 1.32 #ifdef ALLOW_SHELFICE
583     IF (useShelfIce) THEN
584 jmc 1.49 CALL SHELFICE_U_DRAG( bi,bj,k,uFld,KE,KappaRU,vF,myThid )
585 mlosch 1.32 DO j=jMin,jMax
586     DO i=iMin,iMax
587     gUdiss(i,j) = gUdiss(i,j) + vF(i,j)
588     ENDDO
589     ENDDO
590     ENDIF
591     #endif /* ALLOW_SHELFICE */
592    
593 jmc 1.23 C- endif momViscosity
594 adcroft 1.1 ENDIF
595    
596 jmc 1.12 C-- Forcing term (moved to timestep.F)
597     c IF (momForcing)
598     c & CALL EXTERNAL_FORCING_U(
599     c I iMin,iMax,jMin,jMax,bi,bj,k,
600     c I myTime,myThid)
601 adcroft 1.1
602     C-- Metric terms for curvilinear grid systems
603 adcroft 1.5 IF (useNHMTerms) THEN
604 jmc 1.33 C o Non-Hydrostatic (spherical) metric terms
605 jmc 1.49 CALL MOM_U_METRIC_NH( bi,bj,k,uFld,wVel,mT,myThid )
606 adcroft 1.1 DO j=jMin,jMax
607     DO i=iMin,iMax
608 jmc 1.33 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtNHFacU*mT(i,j)
609 adcroft 1.1 ENDDO
610     ENDDO
611 adcroft 1.5 ENDIF
612 jmc 1.33 IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
613     C o Spherical polar grid metric terms
614 jmc 1.49 CALL MOM_U_METRIC_SPHERE( bi,bj,k,uFld,vFld,mT,myThid )
615 adcroft 1.1 DO j=jMin,jMax
616     DO i=iMin,iMax
617 jmc 1.33 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
618 adcroft 1.1 ENDDO
619     ENDDO
620 afe 1.20 ENDIF
621 jmc 1.33 IF ( usingCylindricalGrid .AND. metricTerms ) THEN
622     C o Cylindrical grid metric terms
623 jmc 1.49 CALL MOM_U_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
624 jmc 1.33 DO j=jMin,jMax
625     DO i=iMin,iMax
626     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
627     ENDDO
628 afe 1.19 ENDDO
629 adcroft 1.1 ENDIF
630    
631 jmc 1.23 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
632 adcroft 1.1
633     C---- Meridional momentum equation starts here
634    
635 jmc 1.23 IF (momAdvection) THEN
636 jmc 1.40
637     #ifdef MOM_BOUNDARY_CONSERVE
638     CALL MOM_V_ADV_UV( bi,bj,k,uTrans,vBnd(1-OLx,1-OLy,k,bi,bj),
639     O fZon,myThid )
640     CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vBnd(1-OLx,1-OLy,k,bi,bj),
641     O fMer,myThid )
642 jmc 1.44 CALL MOM_V_ADV_WV( bi,bj,k+1,vBnd,wVel,rTransV,
643     O fVerVkp, myThid )
644 jmc 1.40 #else /* MOM_BOUNDARY_CONSERVE */
645 jmc 1.23 C--- Calculate mean fluxes (advection) between cells for meridional flow.
646     C Mean flow component of zonal flux -> fZon
647 jmc 1.44 CALL MOM_V_ADV_UV( bi,bj,k,uTrans,vFld,fZon,myThid )
648 adcroft 1.1
649     C-- Meridional flux (fMer is at north face of "v" cell)
650 jmc 1.23 C Mean flow component of meridional flux -> fMer
651 jmc 1.44 CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vFld,fMer,myThid )
652 adcroft 1.1
653     C-- Vertical flux (fVer is at upper face of "v" cell)
654 jmc 1.23 C Mean flow component of vertical flux (at k+1) -> fVerV
655 jmc 1.44 CALL MOM_V_ADV_WV( bi,bj,k+1,vVel,wVel,rTransV,
656     O fVerVkp, myThid )
657 jmc 1.40 #endif /* MOM_BOUNDARY_CONSERVE */
658 adcroft 1.1
659     C-- Tendency is minus divergence of the fluxes + coriolis + pressure term
660 jmc 1.23 DO j=jMin,jMax
661     DO i=iMin,iMax
662     gV(i,j,k,bi,bj) =
663 adcroft 1.1 #ifdef OLD_UV_GEOM
664 jmc 1.23 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)/
665     & ( 0.5 _d 0*(_rA(i,j,bi,bj)+_rA(i,j-1,bi,bj)) )
666 adcroft 1.1 #else
667 jmc 1.23 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
668 jmc 1.39 & *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
669 adcroft 1.1 #endif
670 jmc 1.44 & *( ( fZon(i+1,j) - fZon(i,j ) )*uDvdxFac
671     & +( fMer(i, j) - fMer(i,j-1) )*vDvdyFac
672     & +( fVerVkp(i,j) - fVerVkm(i,j) )*rkSign*rVelDvdrFac
673 jmc 1.23 & )
674 jmc 1.24 ENDDO
675     ENDDO
676    
677     #ifdef ALLOW_DIAGNOSTICS
678     IF ( useDiagnostics ) THEN
679 jmc 1.44 CALL DIAGNOSTICS_FILL( fZon, 'ADVx_Vm ',k,1,2,bi,bj,myThid)
680     CALL DIAGNOSTICS_FILL( fMer, 'ADVy_Vm ',k,1,2,bi,bj,myThid)
681     CALL DIAGNOSTICS_FILL(fVerVkm,'ADVrE_Vm',k,1,2,bi,bj,myThid)
682 jmc 1.24 ENDIF
683     #endif
684 adcroft 1.1
685 jmc 1.8 #ifdef NONLIN_FRSURF
686     C-- account for 3.D divergence of the flow in rStar coordinate:
687 heimbach 1.31 # ifndef DISABLE_RSTAR_CODE
688 jmc 1.23 IF ( select_rStar.GT.0 ) THEN
689     DO j=jMin,jMax
690     DO i=iMin,iMax
691     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
692 jmc 1.8 & - (rStarExpS(i,j,bi,bj) - 1. _d 0)/deltaTfreesurf
693     & *vVel(i,j,k,bi,bj)
694 jmc 1.23 ENDDO
695     ENDDO
696     ENDIF
697     IF ( select_rStar.LT.0 ) THEN
698     DO j=jMin,jMax
699     DO i=iMin,iMax
700     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
701     & - rStarDhSDt(i,j,bi,bj)*vVel(i,j,k,bi,bj)
702     ENDDO
703     ENDDO
704     ENDIF
705 heimbach 1.31 # endif /* DISABLE_RSTAR_CODE */
706 jmc 1.23 #endif /* NONLIN_FRSURF */
707    
708 jmc 1.43 #ifdef ALLOW_ADDFLUID
709     IF ( selectAddFluid.GE.1 ) THEN
710     DO j=jMin,jMax
711     DO i=iMin,iMax
712     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
713     & + vVel(i,j,k,bi,bj)*mass2rUnit*0.5 _d 0
714     & *( addMass(i,j-1,k,bi,bj) + addMass(i,j,k,bi,bj) )
715     & *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)*recip_rhoFacC(k)
716     & * recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)
717     ENDDO
718     ENDDO
719     ENDIF
720     #endif /* ALLOW_ADDFLUID */
721    
722 jmc 1.23 ELSE
723     C- if momAdvection / else
724     DO j=1-OLy,sNy+OLy
725     DO i=1-OLx,sNx+OLx
726     gV(i,j,k,bi,bj) = 0. _d 0
727     ENDDO
728 jmc 1.8 ENDDO
729 jmc 1.23
730     C- endif momAdvection.
731 jmc 1.8 ENDIF
732 jmc 1.23
733     IF (momViscosity) THEN
734     C--- Calculate eddy fluxes (dissipation) between cells for meridional flow.
735     C Bi-harmonic term del^2 V -> v4F
736 jmc 1.46 IF ( useBiharmonicVisc )
737 jmc 1.49 & CALL MOM_V_DEL2V( bi, bj, k, vFld, hFacZ, h0FacZ,
738     O v4f, myThid )
739 jmc 1.23
740     C Laplacian and bi-harmonic terms, Zonal Fluxes -> fZon
741 jmc 1.49 CALL MOM_V_XVISCFLUX( bi,bj,k,vFld,v4f,hFacZ,fZon,
742     I viscAh_Z,viscA4_Z,myThid )
743 jmc 1.23
744     C Laplacian and bi-harmonic termis, Merid Fluxes -> fMer
745 jmc 1.49 CALL MOM_V_YVISCFLUX( bi,bj,k,vFld,v4f,fMer,
746     I viscAh_D,viscA4_D,myThid )
747 jmc 1.23
748     C Eddy component of vertical flux (interior component only) -> fVrUp & fVrDw
749     IF (.NOT.implicitViscosity) THEN
750 jmc 1.49 CALL MOM_V_RVISCFLUX( bi,bj, k, vVel,KappaRV,fVrUp,myThid )
751     CALL MOM_V_RVISCFLUX( bi,bj,k+1,vVel,KappaRV,fVrDw,myThid )
752 jmc 1.23 ENDIF
753    
754     C-- Tendency is minus divergence of the fluxes + coriolis + pressure term
755 jmc 1.39 C anelastic: hor.visc.fluxes are not scaled by rhoFac (by vert.visc.flx is)
756 jmc 1.23 DO j=jMin,jMax
757     DO i=iMin,iMax
758     gvDiss(i,j) =
759     #ifdef OLD_UV_GEOM
760     & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)/
761     & ( 0.5 _d 0*(_rA(i,j,bi,bj)+_rA(i,j-1,bi,bj)) )
762     #else
763     & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
764 jmc 1.39 & *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)
765 jmc 1.23 #endif
766 jmc 1.39 & *( ( fZon(i+1,j) - fZon(i,j ) )*AhDvdxFac
767     & +( fMer(i, j) - fMer(i,j-1) )*AhDvdyFac
768     & +( fVrDw(i,j) - fVrUp(i,j) )*rkSign*ArDvdrFac
769     & *recip_rhoFacC(k)
770 jmc 1.23 & )
771     ENDDO
772 jmc 1.8 ENDDO
773    
774 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
775     IF ( useDiagnostics ) THEN
776     CALL DIAGNOSTICS_FILL(fZon, 'VISCx_Vm',k,1,2,bi,bj,myThid)
777     CALL DIAGNOSTICS_FILL(fMer, 'VISCy_Vm',k,1,2,bi,bj,myThid)
778     IF (.NOT.implicitViscosity)
779     & CALL DIAGNOSTICS_FILL(fVrUp,'VISrE_Vm',k,1,2,bi,bj,myThid)
780     ENDIF
781     #endif
782    
783 jmc 1.37 C-- No-slip and drag BCs appear as body forces in cell abutting topography
784 mlosch 1.32 IF (no_slip_sides) THEN
785 adcroft 1.1 C- No-slip BCs impose a drag at walls...
786 jmc 1.46 CALL MOM_V_SIDEDRAG( bi, bj, k,
787 jmc 1.49 I vFld, v4f, h0FacZ,
788     I viscAh_Z, viscA4_Z,
789 jmc 1.46 I useHarmonicVisc, useBiharmonicVisc, useVariableVisc,
790 baylor 1.27 O vF,
791 jmc 1.46 I myThid )
792 jmc 1.23 DO j=jMin,jMax
793     DO i=iMin,iMax
794     gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
795     ENDDO
796     ENDDO
797     ENDIF
798 adcroft 1.1 C- No-slip BCs impose a drag at bottom
799 jmc 1.23 IF (bottomDragTerms) THEN
800 jmc 1.49 CALL MOM_V_BOTTOMDRAG( bi,bj,k,vFld,KE,KappaRV,vF,myThid )
801 jmc 1.23 DO j=jMin,jMax
802     DO i=iMin,iMax
803     gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
804     ENDDO
805     ENDDO
806     ENDIF
807    
808 mlosch 1.32 #ifdef ALLOW_SHELFICE
809     IF (useShelfIce) THEN
810 jmc 1.49 CALL SHELFICE_V_DRAG( bi,bj,k,vFld,KE,KappaRV,vF,myThid )
811 mlosch 1.32 DO j=jMin,jMax
812     DO i=iMin,iMax
813     gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
814     ENDDO
815     ENDDO
816     ENDIF
817     #endif /* ALLOW_SHELFICE */
818    
819 jmc 1.23 C- endif momViscosity
820 adcroft 1.1 ENDIF
821    
822 jmc 1.12 C-- Forcing term (moved to timestep.F)
823     c IF (momForcing)
824     c & CALL EXTERNAL_FORCING_V(
825     c I iMin,iMax,jMin,jMax,bi,bj,k,
826     c I myTime,myThid)
827 adcroft 1.1
828     C-- Metric terms for curvilinear grid systems
829 adcroft 1.5 IF (useNHMTerms) THEN
830 jmc 1.33 C o Non-Hydrostatic (spherical) metric terms
831 jmc 1.49 CALL MOM_V_METRIC_NH( bi,bj,k,vFld,wVel,mT,myThid )
832 adcroft 1.1 DO j=jMin,jMax
833     DO i=iMin,iMax
834 jmc 1.33 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtNHFacV*mT(i,j)
835 adcroft 1.1 ENDDO
836     ENDDO
837 adcroft 1.5 ENDIF
838 jmc 1.33 IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
839     C o Spherical polar grid metric terms
840 jmc 1.49 CALL MOM_V_METRIC_SPHERE( bi,bj,k,uFld,mT,myThid )
841 adcroft 1.1 DO j=jMin,jMax
842     DO i=iMin,iMax
843 jmc 1.33 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
844 adcroft 1.1 ENDDO
845     ENDDO
846     ENDIF
847 jmc 1.33 IF ( usingCylindricalGrid .AND. metricTerms ) THEN
848     C o Cylindrical grid metric terms
849 jmc 1.49 CALL MOM_V_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
850 jmc 1.33 DO j=jMin,jMax
851     DO i=iMin,iMax
852     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
853     ENDDO
854     ENDDO
855 afe 1.19 ENDIF
856 adcroft 1.1
857 jmc 1.23 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
858 adcroft 1.1
859 jmc 1.48 C-- Coriolis term (call to CD_CODE_SCHEME has been moved to timestep.F)
860 jmc 1.12 IF (.NOT.useCDscheme) THEN
861 jmc 1.49 CALL MOM_U_CORIOLIS( bi,bj,k,vFld,cf,myThid )
862 jmc 1.12 DO j=jMin,jMax
863     DO i=iMin,iMax
864     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
865     ENDDO
866     ENDDO
867 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
868     IF ( useDiagnostics )
869     & CALL DIAGNOSTICS_FILL(cf,'Um_Cori ',k,1,2,bi,bj,myThid)
870     #endif
871 jmc 1.49 CALL MOM_V_CORIOLIS( bi,bj,k,uFld,cf,myThid )
872 jmc 1.12 DO j=jMin,jMax
873     DO i=iMin,iMax
874     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
875     ENDDO
876     ENDDO
877 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
878     IF ( useDiagnostics )
879     & CALL DIAGNOSTICS_FILL(cf,'Vm_Cori ',k,1,2,bi,bj,myThid)
880     #endif
881 jmc 1.12 ENDIF
882    
883 jmc 1.42 C-- 3.D Coriolis term (horizontal momentum, Eastward component: -fprime*w)
884 jmc 1.37 IF ( use3dCoriolis ) THEN
885 jmc 1.49 CALL MOM_U_CORIOLIS_NH( bi,bj,k,wVel,cf,myThid )
886 jmc 1.34 DO j=jMin,jMax
887     DO i=iMin,iMax
888     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
889     ENDDO
890     ENDDO
891     IF ( usingCurvilinearGrid ) THEN
892     C- presently, non zero angleSinC array only supported with Curvilinear-Grid
893 jmc 1.49 CALL MOM_V_CORIOLIS_NH( bi,bj,k,wVel,cf,myThid )
894 jmc 1.34 DO j=jMin,jMax
895     DO i=iMin,iMax
896     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
897     ENDDO
898 adcroft 1.6 ENDDO
899 jmc 1.34 ENDIF
900 adcroft 1.6 ENDIF
901 adcroft 1.1
902 jmc 1.23 C-- Set du/dt & dv/dt on boundaries to zero
903     DO j=jMin,jMax
904     DO i=iMin,iMax
905     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)*_maskW(i,j,k,bi,bj)
906     guDiss(i,j) = guDiss(i,j) *_maskW(i,j,k,bi,bj)
907     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
908     gvDiss(i,j) = gvDiss(i,j) *_maskS(i,j,k,bi,bj)
909     ENDDO
910     ENDDO
911    
912 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
913     IF ( useDiagnostics ) THEN
914 baylor 1.28 CALL DIAGNOSTICS_FILL(KE, 'momKE ',k,1,2,bi,bj,myThid)
915 jmc 1.43 CALL DIAGNOSTICS_FILL(gU(1-OLx,1-OLy,k,bi,bj),
916 jmc 1.24 & 'Um_Advec',k,1,2,bi,bj,myThid)
917 jmc 1.43 CALL DIAGNOSTICS_FILL(gV(1-OLx,1-OLy,k,bi,bj),
918 jmc 1.24 & 'Vm_Advec',k,1,2,bi,bj,myThid)
919     IF (momViscosity) THEN
920     CALL DIAGNOSTICS_FILL(guDiss,'Um_Diss ',k,1,2,bi,bj,myThid)
921     CALL DIAGNOSTICS_FILL(gvDiss,'Vm_Diss ',k,1,2,bi,bj,myThid)
922     ENDIF
923     ENDIF
924     #endif /* ALLOW_DIAGNOSTICS */
925    
926 adcroft 1.1 RETURN
927     END

  ViewVC Help
Powered by ViewVC 1.1.22