/[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.51 - (hide annotations) (download)
Fri Apr 4 19:53:30 2014 UTC (10 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint65, checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64w, checkpoint64v
Changes since 1.50: +7 -4 lines
Replace ALLOW_AUTODIFF_TAMC by ALLOW_AUTODIFF (except for tape/storage
  which are specific to TAF/TAMC).

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

  ViewVC Help
Powered by ViewVC 1.1.22