/[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.54 - (hide annotations) (download)
Sat Jan 3 23:57:57 2015 UTC (10 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65i, checkpoint65n, checkpoint65l, checkpoint65m, checkpoint66a, checkpoint65o
Changes since 1.53: +18 -6 lines
add one argument (the other velocity component) to S/R MOM_U/V_BOTTOMDRAG
 and S/R SHELFICE_U/V_DRAG

1 jmc 1.54 C $Header: /u/gcmpack/MITgcm/pkg/mom_fluxform/mom_fluxform.F,v 1.53 2014/12/24 19:12: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.53 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 jmc 1.53 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 jmc 1.53 _RL kappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
89     _RL kappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
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 jmc 1.54 & .OR. selectBotDragQuadr.GE.0
257 adcroft 1.1 & .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.53 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.54 CALL MOM_U_BOTTOMDRAG( bi, bj, k,
578     I uFld, vFld, KE, kappaRU,
579     O vF,
580     I myThid )
581 jmc 1.23 DO j=jMin,jMax
582     DO i=iMin,iMax
583     gUdiss(i,j) = gUdiss(i,j) + vF(i,j)
584     ENDDO
585     ENDDO
586     ENDIF
587    
588 mlosch 1.32 #ifdef ALLOW_SHELFICE
589     IF (useShelfIce) THEN
590 jmc 1.54 CALL SHELFICE_U_DRAG( bi, bj, k,
591     I uFld, vFld, KE, kappaRU,
592     O vF,
593     I myThid )
594 mlosch 1.32 DO j=jMin,jMax
595     DO i=iMin,iMax
596     gUdiss(i,j) = gUdiss(i,j) + vF(i,j)
597     ENDDO
598     ENDDO
599     ENDIF
600     #endif /* ALLOW_SHELFICE */
601    
602 jmc 1.23 C- endif momViscosity
603 adcroft 1.1 ENDIF
604    
605 jmc 1.12 C-- Forcing term (moved to timestep.F)
606     c IF (momForcing)
607     c & CALL EXTERNAL_FORCING_U(
608     c I iMin,iMax,jMin,jMax,bi,bj,k,
609     c I myTime,myThid)
610 adcroft 1.1
611     C-- Metric terms for curvilinear grid systems
612 adcroft 1.5 IF (useNHMTerms) THEN
613 jmc 1.33 C o Non-Hydrostatic (spherical) metric terms
614 jmc 1.49 CALL MOM_U_METRIC_NH( bi,bj,k,uFld,wVel,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)+mtNHFacU*mT(i,j)
618 adcroft 1.1 ENDDO
619     ENDDO
620 adcroft 1.5 ENDIF
621 jmc 1.33 IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
622     C o Spherical polar grid metric terms
623 jmc 1.49 CALL MOM_U_METRIC_SPHERE( bi,bj,k,uFld,vFld,mT,myThid )
624 adcroft 1.1 DO j=jMin,jMax
625     DO i=iMin,iMax
626 jmc 1.33 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
627 adcroft 1.1 ENDDO
628     ENDDO
629 afe 1.20 ENDIF
630 jmc 1.33 IF ( usingCylindricalGrid .AND. metricTerms ) THEN
631     C o Cylindrical grid metric terms
632 jmc 1.49 CALL MOM_U_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
633 jmc 1.33 DO j=jMin,jMax
634     DO i=iMin,iMax
635     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
636     ENDDO
637 afe 1.19 ENDDO
638 adcroft 1.1 ENDIF
639    
640 jmc 1.23 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
641 adcroft 1.1
642     C---- Meridional momentum equation starts here
643    
644 jmc 1.23 IF (momAdvection) THEN
645 jmc 1.40
646     #ifdef MOM_BOUNDARY_CONSERVE
647     CALL MOM_V_ADV_UV( bi,bj,k,uTrans,vBnd(1-OLx,1-OLy,k,bi,bj),
648     O fZon,myThid )
649     CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vBnd(1-OLx,1-OLy,k,bi,bj),
650     O fMer,myThid )
651 jmc 1.44 CALL MOM_V_ADV_WV( bi,bj,k+1,vBnd,wVel,rTransV,
652     O fVerVkp, myThid )
653 jmc 1.40 #else /* MOM_BOUNDARY_CONSERVE */
654 jmc 1.23 C--- Calculate mean fluxes (advection) between cells for meridional flow.
655     C Mean flow component of zonal flux -> fZon
656 jmc 1.44 CALL MOM_V_ADV_UV( bi,bj,k,uTrans,vFld,fZon,myThid )
657 adcroft 1.1
658     C-- Meridional flux (fMer is at north face of "v" cell)
659 jmc 1.23 C Mean flow component of meridional flux -> fMer
660 jmc 1.44 CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vFld,fMer,myThid )
661 adcroft 1.1
662     C-- Vertical flux (fVer is at upper face of "v" cell)
663 jmc 1.23 C Mean flow component of vertical flux (at k+1) -> fVerV
664 jmc 1.44 CALL MOM_V_ADV_WV( bi,bj,k+1,vVel,wVel,rTransV,
665     O fVerVkp, myThid )
666 jmc 1.40 #endif /* MOM_BOUNDARY_CONSERVE */
667 adcroft 1.1
668     C-- Tendency is minus divergence of the fluxes + coriolis + pressure term
669 jmc 1.23 DO j=jMin,jMax
670     DO i=iMin,iMax
671     gV(i,j,k,bi,bj) =
672 adcroft 1.1 #ifdef OLD_UV_GEOM
673 jmc 1.23 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)/
674     & ( 0.5 _d 0*(_rA(i,j,bi,bj)+_rA(i,j-1,bi,bj)) )
675 adcroft 1.1 #else
676 jmc 1.23 & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
677 jmc 1.39 & *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
678 adcroft 1.1 #endif
679 jmc 1.44 & *( ( fZon(i+1,j) - fZon(i,j ) )*uDvdxFac
680     & +( fMer(i, j) - fMer(i,j-1) )*vDvdyFac
681     & +( fVerVkp(i,j) - fVerVkm(i,j) )*rkSign*rVelDvdrFac
682 jmc 1.23 & )
683 jmc 1.24 ENDDO
684     ENDDO
685    
686     #ifdef ALLOW_DIAGNOSTICS
687     IF ( useDiagnostics ) THEN
688 jmc 1.44 CALL DIAGNOSTICS_FILL( fZon, 'ADVx_Vm ',k,1,2,bi,bj,myThid)
689     CALL DIAGNOSTICS_FILL( fMer, 'ADVy_Vm ',k,1,2,bi,bj,myThid)
690     CALL DIAGNOSTICS_FILL(fVerVkm,'ADVrE_Vm',k,1,2,bi,bj,myThid)
691 jmc 1.24 ENDIF
692     #endif
693 adcroft 1.1
694 jmc 1.8 #ifdef NONLIN_FRSURF
695     C-- account for 3.D divergence of the flow in rStar coordinate:
696 heimbach 1.31 # ifndef DISABLE_RSTAR_CODE
697 jmc 1.23 IF ( select_rStar.GT.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 jmc 1.51 & - (rStarExpS(i,j,bi,bj) - 1. _d 0)/deltaTFreeSurf
702 jmc 1.8 & *vVel(i,j,k,bi,bj)
703 jmc 1.23 ENDDO
704     ENDDO
705     ENDIF
706     IF ( select_rStar.LT.0 ) THEN
707     DO j=jMin,jMax
708     DO i=iMin,iMax
709     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
710     & - rStarDhSDt(i,j,bi,bj)*vVel(i,j,k,bi,bj)
711     ENDDO
712     ENDDO
713     ENDIF
714 heimbach 1.31 # endif /* DISABLE_RSTAR_CODE */
715 jmc 1.23 #endif /* NONLIN_FRSURF */
716    
717 jmc 1.43 #ifdef ALLOW_ADDFLUID
718     IF ( selectAddFluid.GE.1 ) THEN
719     DO j=jMin,jMax
720     DO i=iMin,iMax
721     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
722     & + vVel(i,j,k,bi,bj)*mass2rUnit*0.5 _d 0
723     & *( addMass(i,j-1,k,bi,bj) + addMass(i,j,k,bi,bj) )
724     & *_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)*recip_rhoFacC(k)
725     & * recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)
726     ENDDO
727     ENDDO
728     ENDIF
729     #endif /* ALLOW_ADDFLUID */
730    
731 jmc 1.23 ELSE
732     C- if momAdvection / else
733     DO j=1-OLy,sNy+OLy
734     DO i=1-OLx,sNx+OLx
735     gV(i,j,k,bi,bj) = 0. _d 0
736     ENDDO
737 jmc 1.8 ENDDO
738 jmc 1.23
739     C- endif momAdvection.
740 jmc 1.8 ENDIF
741 jmc 1.23
742     IF (momViscosity) THEN
743     C--- Calculate eddy fluxes (dissipation) between cells for meridional flow.
744     C Bi-harmonic term del^2 V -> v4F
745 jmc 1.46 IF ( useBiharmonicVisc )
746 jmc 1.49 & CALL MOM_V_DEL2V( bi, bj, k, vFld, hFacZ, h0FacZ,
747     O v4f, myThid )
748 jmc 1.23
749     C Laplacian and bi-harmonic terms, Zonal Fluxes -> fZon
750 jmc 1.49 CALL MOM_V_XVISCFLUX( bi,bj,k,vFld,v4f,hFacZ,fZon,
751     I viscAh_Z,viscA4_Z,myThid )
752 jmc 1.23
753     C Laplacian and bi-harmonic termis, Merid Fluxes -> fMer
754 jmc 1.49 CALL MOM_V_YVISCFLUX( bi,bj,k,vFld,v4f,fMer,
755     I viscAh_D,viscA4_D,myThid )
756 jmc 1.23
757     C Eddy component of vertical flux (interior component only) -> fVrUp & fVrDw
758     IF (.NOT.implicitViscosity) THEN
759 jmc 1.49 CALL MOM_V_RVISCFLUX( bi,bj, k, vVel,KappaRV,fVrUp,myThid )
760     CALL MOM_V_RVISCFLUX( bi,bj,k+1,vVel,KappaRV,fVrDw,myThid )
761 jmc 1.23 ENDIF
762    
763     C-- Tendency is minus divergence of the fluxes + coriolis + pressure term
764 jmc 1.39 C anelastic: hor.visc.fluxes are not scaled by rhoFac (by vert.visc.flx is)
765 jmc 1.23 DO j=jMin,jMax
766     DO i=iMin,iMax
767     gvDiss(i,j) =
768     #ifdef OLD_UV_GEOM
769     & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)/
770     & ( 0.5 _d 0*(_rA(i,j,bi,bj)+_rA(i,j-1,bi,bj)) )
771     #else
772     & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
773 jmc 1.39 & *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)
774 jmc 1.23 #endif
775 jmc 1.39 & *( ( fZon(i+1,j) - fZon(i,j ) )*AhDvdxFac
776     & +( fMer(i, j) - fMer(i,j-1) )*AhDvdyFac
777     & +( fVrDw(i,j) - fVrUp(i,j) )*rkSign*ArDvdrFac
778     & *recip_rhoFacC(k)
779 jmc 1.23 & )
780     ENDDO
781 jmc 1.8 ENDDO
782    
783 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
784     IF ( useDiagnostics ) THEN
785     CALL DIAGNOSTICS_FILL(fZon, 'VISCx_Vm',k,1,2,bi,bj,myThid)
786     CALL DIAGNOSTICS_FILL(fMer, 'VISCy_Vm',k,1,2,bi,bj,myThid)
787     IF (.NOT.implicitViscosity)
788     & CALL DIAGNOSTICS_FILL(fVrUp,'VISrE_Vm',k,1,2,bi,bj,myThid)
789     ENDIF
790     #endif
791    
792 jmc 1.37 C-- No-slip and drag BCs appear as body forces in cell abutting topography
793 mlosch 1.32 IF (no_slip_sides) THEN
794 adcroft 1.1 C- No-slip BCs impose a drag at walls...
795 jmc 1.46 CALL MOM_V_SIDEDRAG( bi, bj, k,
796 jmc 1.49 I vFld, v4f, h0FacZ,
797     I viscAh_Z, viscA4_Z,
798 jmc 1.46 I useHarmonicVisc, useBiharmonicVisc, useVariableVisc,
799 baylor 1.27 O vF,
800 jmc 1.46 I 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 adcroft 1.1 C- No-slip BCs impose a drag at bottom
808 jmc 1.23 IF (bottomDragTerms) THEN
809 jmc 1.54 CALL MOM_V_BOTTOMDRAG( bi, bj, k,
810     I uFld, vFld, KE, kappaRV,
811     O vF,
812     I myThid )
813 jmc 1.23 DO j=jMin,jMax
814     DO i=iMin,iMax
815     gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
816     ENDDO
817     ENDDO
818     ENDIF
819    
820 mlosch 1.32 #ifdef ALLOW_SHELFICE
821     IF (useShelfIce) THEN
822 jmc 1.54 CALL SHELFICE_V_DRAG( bi, bj, k,
823     I uFld, vFld, KE, kappaRV,
824     O vF,
825     I myThid )
826 mlosch 1.32 DO j=jMin,jMax
827     DO i=iMin,iMax
828     gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
829     ENDDO
830     ENDDO
831     ENDIF
832     #endif /* ALLOW_SHELFICE */
833    
834 jmc 1.23 C- endif momViscosity
835 adcroft 1.1 ENDIF
836    
837 jmc 1.12 C-- Forcing term (moved to timestep.F)
838     c IF (momForcing)
839     c & CALL EXTERNAL_FORCING_V(
840     c I iMin,iMax,jMin,jMax,bi,bj,k,
841     c I myTime,myThid)
842 adcroft 1.1
843     C-- Metric terms for curvilinear grid systems
844 adcroft 1.5 IF (useNHMTerms) THEN
845 jmc 1.33 C o Non-Hydrostatic (spherical) metric terms
846 jmc 1.49 CALL MOM_V_METRIC_NH( bi,bj,k,vFld,wVel,mT,myThid )
847 adcroft 1.1 DO j=jMin,jMax
848     DO i=iMin,iMax
849 jmc 1.33 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtNHFacV*mT(i,j)
850 adcroft 1.1 ENDDO
851     ENDDO
852 adcroft 1.5 ENDIF
853 jmc 1.33 IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
854     C o Spherical polar grid metric terms
855 jmc 1.49 CALL MOM_V_METRIC_SPHERE( bi,bj,k,uFld,mT,myThid )
856 adcroft 1.1 DO j=jMin,jMax
857     DO i=iMin,iMax
858 jmc 1.33 gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
859 adcroft 1.1 ENDDO
860     ENDDO
861     ENDIF
862 jmc 1.33 IF ( usingCylindricalGrid .AND. metricTerms ) THEN
863     C o Cylindrical grid metric terms
864 jmc 1.49 CALL MOM_V_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
865 jmc 1.33 DO j=jMin,jMax
866     DO i=iMin,iMax
867     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
868     ENDDO
869     ENDDO
870 afe 1.19 ENDIF
871 adcroft 1.1
872 jmc 1.23 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
873 adcroft 1.1
874 jmc 1.48 C-- Coriolis term (call to CD_CODE_SCHEME has been moved to timestep.F)
875 jmc 1.12 IF (.NOT.useCDscheme) THEN
876 jmc 1.49 CALL MOM_U_CORIOLIS( bi,bj,k,vFld,cf,myThid )
877 jmc 1.12 DO j=jMin,jMax
878     DO i=iMin,iMax
879     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
880     ENDDO
881     ENDDO
882 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
883     IF ( useDiagnostics )
884     & CALL DIAGNOSTICS_FILL(cf,'Um_Cori ',k,1,2,bi,bj,myThid)
885     #endif
886 jmc 1.49 CALL MOM_V_CORIOLIS( bi,bj,k,uFld,cf,myThid )
887 jmc 1.12 DO j=jMin,jMax
888     DO i=iMin,iMax
889     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
890     ENDDO
891     ENDDO
892 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
893     IF ( useDiagnostics )
894     & CALL DIAGNOSTICS_FILL(cf,'Vm_Cori ',k,1,2,bi,bj,myThid)
895     #endif
896 jmc 1.12 ENDIF
897    
898 jmc 1.42 C-- 3.D Coriolis term (horizontal momentum, Eastward component: -fprime*w)
899 jmc 1.37 IF ( use3dCoriolis ) THEN
900 jmc 1.49 CALL MOM_U_CORIOLIS_NH( bi,bj,k,wVel,cf,myThid )
901 jmc 1.34 DO j=jMin,jMax
902     DO i=iMin,iMax
903     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
904     ENDDO
905     ENDDO
906     IF ( usingCurvilinearGrid ) THEN
907     C- presently, non zero angleSinC array only supported with Curvilinear-Grid
908 jmc 1.49 CALL MOM_V_CORIOLIS_NH( bi,bj,k,wVel,cf,myThid )
909 jmc 1.34 DO j=jMin,jMax
910     DO i=iMin,iMax
911     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
912     ENDDO
913 adcroft 1.6 ENDDO
914 jmc 1.34 ENDIF
915 adcroft 1.6 ENDIF
916 adcroft 1.1
917 jmc 1.23 C-- Set du/dt & dv/dt on boundaries to zero
918     DO j=jMin,jMax
919     DO i=iMin,iMax
920     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)*_maskW(i,j,k,bi,bj)
921     guDiss(i,j) = guDiss(i,j) *_maskW(i,j,k,bi,bj)
922     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
923     gvDiss(i,j) = gvDiss(i,j) *_maskS(i,j,k,bi,bj)
924     ENDDO
925     ENDDO
926    
927 jmc 1.24 #ifdef ALLOW_DIAGNOSTICS
928     IF ( useDiagnostics ) THEN
929 baylor 1.28 CALL DIAGNOSTICS_FILL(KE, 'momKE ',k,1,2,bi,bj,myThid)
930 jmc 1.43 CALL DIAGNOSTICS_FILL(gU(1-OLx,1-OLy,k,bi,bj),
931 jmc 1.24 & 'Um_Advec',k,1,2,bi,bj,myThid)
932 jmc 1.43 CALL DIAGNOSTICS_FILL(gV(1-OLx,1-OLy,k,bi,bj),
933 jmc 1.24 & 'Vm_Advec',k,1,2,bi,bj,myThid)
934     ENDIF
935     #endif /* ALLOW_DIAGNOSTICS */
936    
937 adcroft 1.1 RETURN
938     END

  ViewVC Help
Powered by ViewVC 1.1.22