/[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.8 - (hide annotations) (download)
Sun Jan 26 21:18:50 2003 UTC (21 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint48b_post
Changes since 1.7: +89 -26 lines
change vertical advection of momentum, now in 2 steps:
 1) compute vertical transport: new S/R mom_calc_rtrans.F
    that includes r* specific calculation.
 2) compute vertical advection of momentum using vertical transport.

1 jmc 1.8 C $Header: /u/gcmpack/MITgcm/pkg/mom_fluxform/mom_fluxform.F,v 1.7 2002/11/07 21:51:15 adcroft 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 adcroft 1.1 #include "CPP_OPTIONS.h"
29    
30 adcroft 1.3 CBOP
31     C !ROUTINE: MOM_FLUXFORM
32    
33     C !INTERFACE: ==========================================================
34 adcroft 1.1 SUBROUTINE MOM_FLUXFORM(
35     I bi,bj,iMin,iMax,jMin,jMax,k,kUp,kDown,
36     I phi_hyd,KappaRU,KappaRV,
37     U fVerU, fVerV,
38 jmc 1.8 I myTime,myIter,myThid)
39 adcroft 1.3
40     C !DESCRIPTION:
41     C Calculates all the horizontal accelerations except for the implicit surface
42     C pressure gradient and implciit vertical viscosity.
43 adcroft 1.1
44 adcroft 1.3 C !USES: ===============================================================
45 adcroft 1.1 C == Global variables ==
46 adcroft 1.3 IMPLICIT NONE
47 adcroft 1.1 #include "SIZE.h"
48     #include "DYNVARS.h"
49     #include "FFIELDS.h"
50     #include "EEPARAMS.h"
51     #include "PARAMS.h"
52     #include "GRID.h"
53     #include "SURFACE.h"
54    
55 adcroft 1.3 C !INPUT PARAMETERS: ===================================================
56     C bi,bj :: tile indices
57     C iMin,iMax,jMin,jMAx :: loop ranges
58     C k :: vertical level
59     C kUp :: =1 or 2 for consecutive k
60     C kDown :: =2 or 1 for consecutive k
61     C phi_hyd :: hydrostatic pressure (perturbation)
62     C KappaRU :: vertical viscosity
63     C KappaRV :: vertical viscosity
64     C fVerU :: vertical flux of U, 2 1/2 dim for pipe-lining
65     C fVerV :: vertical flux of V, 2 1/2 dim for pipe-lining
66 jmc 1.8 C myTime :: current time
67 adcroft 1.3 C myIter :: current time-step number
68     C myThid :: thread number
69     INTEGER bi,bj,iMin,iMax,jMin,jMax
70     INTEGER k,kUp,kDown
71 adcroft 1.1 _RL phi_hyd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
72     _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
73     _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
74     _RL fVerU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
75     _RL fVerV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
76 jmc 1.8 _RL myTime
77 adcroft 1.2 INTEGER myIter
78 adcroft 1.1 INTEGER myThid
79    
80 adcroft 1.3 C !OUTPUT PARAMETERS: ==================================================
81     C None - updates gU() and gV() in common blocks
82    
83     C !LOCAL VARIABLES: ====================================================
84     C i,j :: loop indices
85     C aF :: advective flux
86     C vF :: viscous flux
87     C v4F :: bi-harmonic viscous flux
88     C vrF :: vertical viscous flux
89     C cF :: Coriolis acceleration
90     C mT :: Metric terms
91     C pF :: Pressure gradient
92     C fZon :: zonal fluxes
93     C fMer :: meridional fluxes
94     INTEGER i,j
95     _RL aF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
96     _RL vF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
97     _RL v4F(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
98     _RL vrF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
99     _RL cF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
100     _RL mT(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
101     _RL pF(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
102     _RL fZon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
103     _RL fMer(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
104 adcroft 1.1 C wMaskOverride - Land sea flag override for top layer.
105     C afFacMom - Tracer parameters for turning terms
106     C vfFacMom on and off.
107     C pfFacMom afFacMom - Advective terms
108     C cfFacMom vfFacMom - Eddy viscosity terms
109     C mTFacMom pfFacMom - Pressure terms
110     C cfFacMom - Coriolis terms
111     C foFacMom - Forcing
112     C mTFacMom - Metric term
113     C uDudxFac, AhDudxFac, etc ... individual term tracer parameters
114     _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
115     _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
116     _RS xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
117     _RS yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
118     _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
119     _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
120     _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
121     _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
122 jmc 1.8 _RL rTransU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
123     _RL rTransV(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
124 adcroft 1.1 C I,J,K - Loop counters
125     C rVelMaskOverride - Factor for imposing special surface boundary conditions
126     C ( set according to free-surface condition ).
127     C hFacROpen - Lopped cell factos used tohold fraction of open
128     C hFacRClosed and closed cell wall.
129     _RL rVelMaskOverride
130     C xxxFac - On-off tracer parameters used for switching terms off.
131     _RL uDudxFac
132     _RL AhDudxFac
133     _RL A4DuxxdxFac
134     _RL vDudyFac
135     _RL AhDudyFac
136     _RL A4DuyydyFac
137     _RL rVelDudrFac
138     _RL ArDudrFac
139     _RL fuFac
140     _RL phxFac
141     _RL mtFacU
142     _RL uDvdxFac
143     _RL AhDvdxFac
144     _RL A4DvxxdxFac
145     _RL vDvdyFac
146     _RL AhDvdyFac
147     _RL A4DvyydyFac
148     _RL rVelDvdrFac
149     _RL ArDvdrFac
150     _RL fvFac
151     _RL phyFac
152     _RL vForcFac
153     _RL mtFacV
154     INTEGER km1,kp1
155     _RL wVelBottomOverride
156     LOGICAL bottomDragTerms
157     _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
158 adcroft 1.3 CEOP
159 adcroft 1.1
160     km1=MAX(1,k-1)
161     kp1=MIN(Nr,k+1)
162     rVelMaskOverride=1.
163     IF ( k .EQ. 1 ) rVelMaskOverride=freeSurfFac
164     wVelBottomOverride=1.
165     IF (k.EQ.Nr) wVelBottomOverride=0.
166    
167     C Initialise intermediate terms
168     DO J=1-OLy,sNy+OLy
169     DO I=1-OLx,sNx+OLx
170     aF(i,j) = 0.
171     vF(i,j) = 0.
172     v4F(i,j) = 0.
173     vrF(i,j) = 0.
174     cF(i,j) = 0.
175     mT(i,j) = 0.
176     pF(i,j) = 0.
177     fZon(i,j) = 0.
178     fMer(i,j) = 0.
179 jmc 1.8 rTransU(i,j) = 0.
180     rTransV(i,j) = 0.
181 adcroft 1.1 ENDDO
182     ENDDO
183    
184     C-- Term by term tracer parmeters
185     C o U momentum equation
186     uDudxFac = afFacMom*1.
187     AhDudxFac = vfFacMom*1.
188     A4DuxxdxFac = vfFacMom*1.
189     vDudyFac = afFacMom*1.
190     AhDudyFac = vfFacMom*1.
191     A4DuyydyFac = vfFacMom*1.
192     rVelDudrFac = afFacMom*1.
193     ArDudrFac = vfFacMom*1.
194     mTFacU = mtFacMom*1.
195     fuFac = cfFacMom*1.
196     phxFac = pfFacMom*1.
197     C o V momentum equation
198     uDvdxFac = afFacMom*1.
199     AhDvdxFac = vfFacMom*1.
200     A4DvxxdxFac = vfFacMom*1.
201     vDvdyFac = afFacMom*1.
202     AhDvdyFac = vfFacMom*1.
203     A4DvyydyFac = vfFacMom*1.
204     rVelDvdrFac = afFacMom*1.
205     ArDvdrFac = vfFacMom*1.
206     mTFacV = mtFacMom*1.
207     fvFac = cfFacMom*1.
208     phyFac = pfFacMom*1.
209     vForcFac = foFacMom*1.
210    
211     IF ( no_slip_bottom
212     & .OR. bottomDragQuadratic.NE.0.
213     & .OR. bottomDragLinear.NE.0.) THEN
214     bottomDragTerms=.TRUE.
215     ELSE
216     bottomDragTerms=.FALSE.
217     ENDIF
218    
219     C-- with stagger time stepping, grad Phi_Hyp is directly incoporated in TIMESTEP
220     IF (staggerTimeStep) THEN
221     phxFac = 0.
222     phyFac = 0.
223     ENDIF
224    
225     C-- Calculate open water fraction at vorticity points
226     CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)
227    
228     C---- Calculate common quantities used in both U and V equations
229     C Calculate tracer cell face open areas
230     DO j=1-OLy,sNy+OLy
231     DO i=1-OLx,sNx+OLx
232     xA(i,j) = _dyG(i,j,bi,bj)
233     & *drF(k)*_hFacW(i,j,k,bi,bj)
234     yA(i,j) = _dxG(i,j,bi,bj)
235     & *drF(k)*_hFacS(i,j,k,bi,bj)
236     ENDDO
237     ENDDO
238    
239     C Make local copies of horizontal flow field
240     DO j=1-OLy,sNy+OLy
241     DO i=1-OLx,sNx+OLx
242     uFld(i,j) = uVel(i,j,k,bi,bj)
243     vFld(i,j) = vVel(i,j,k,bi,bj)
244     ENDDO
245     ENDDO
246    
247     C Calculate velocity field "volume transports" through tracer cell faces.
248     DO j=1-OLy,sNy+OLy
249     DO i=1-OLx,sNx+OLx
250     uTrans(i,j) = uFld(i,j)*xA(i,j)
251     vTrans(i,j) = vFld(i,j)*yA(i,j)
252     ENDDO
253     ENDDO
254    
255     CALL MOM_CALC_KE(bi,bj,k,uFld,vFld,KE,myThid)
256    
257 jmc 1.8 C--- First call (k=1): compute vertical adv. flux fVerU(kUp) & fVerV(kUp)
258     IF (momAdvection.AND.k.EQ.1) THEN
259    
260     C- Calculate vertical transports above U & V points (West & South face):
261     CALL MOM_CALC_RTRANS( k, bi, bj,
262     O rTransU, rTransV,
263     I myTime, myIter, myThid)
264    
265     C- Free surface correction term (flux at k=1)
266     CALL MOM_U_ADV_WU(bi,bj,k,uVel,wVel,rTransU,af,myThid)
267     DO j=jMin,jMax
268     DO i=iMin,iMax
269     fVerU(i,j,kUp) = af(i,j)
270     ENDDO
271     ENDDO
272    
273     CALL MOM_V_ADV_WV(bi,bj,k,vVel,wVel,rTransV,af,myThid)
274     DO j=jMin,jMax
275     DO i=iMin,iMax
276     fVerV(i,j,kUp) = af(i,j)
277     ENDDO
278     ENDDO
279    
280     C--- endif momAdvection & k=1
281     ENDIF
282    
283    
284     C--- Calculate vertical transports (at k+1) below U & V points :
285     IF (momAdvection) THEN
286     CALL MOM_CALC_RTRANS( k+1, bi, bj,
287     O rTransU, rTransV,
288     I myTime, myIter, myThid)
289     ENDIF
290    
291    
292 adcroft 1.1 C---- Zonal momentum equation starts here
293    
294     C Bi-harmonic term del^2 U -> v4F
295     IF (momViscosity)
296     & CALL MOM_U_DEL2U(bi,bj,k,uFld,hFacZ,v4f,myThid)
297    
298     C--- Calculate mean and eddy fluxes between cells for zonal flow.
299    
300     C-- Zonal flux (fZon is at east face of "u" cell)
301    
302     C Mean flow component of zonal flux -> aF
303     IF (momAdvection)
304     & CALL MOM_U_ADV_UU(bi,bj,k,uTrans,uFld,aF,myThid)
305    
306     C Laplacian and bi-harmonic terms -> vF
307     IF (momViscosity)
308     & CALL MOM_U_XVISCFLUX(bi,bj,k,uFld,v4F,vF,myThid)
309    
310     C Combine fluxes -> fZon
311     DO j=jMin,jMax
312     DO i=iMin,iMax
313     fZon(i,j) = uDudxFac*aF(i,j) + AhDudxFac*vF(i,j)
314     ENDDO
315     ENDDO
316    
317     C-- Meridional flux (fMer is at south face of "u" cell)
318    
319     C Mean flow component of meridional flux
320     IF (momAdvection)
321     & CALL MOM_U_ADV_VU(bi,bj,k,vTrans,uFld,aF,myThid)
322    
323     C Laplacian and bi-harmonic term
324     IF (momViscosity)
325     & CALL MOM_U_YVISCFLUX(bi,bj,k,uFld,v4F,hFacZ,vF,myThid)
326    
327     C Combine fluxes -> fMer
328     DO j=jMin,jMax
329     DO i=iMin,iMax
330     fMer(i,j) = vDudyFac*aF(i,j) + AhDudyFac*vF(i,j)
331     ENDDO
332     ENDDO
333    
334     C-- Vertical flux (fVer is at upper face of "u" cell)
335    
336     C Mean flow component of vertical flux (at k+1) -> aF
337     IF (momAdvection)
338 jmc 1.8 & CALL MOM_U_ADV_WU(bi,bj,k+1,uVel,wVel,rTransU,af,myThid)
339 adcroft 1.1
340     C Eddy component of vertical flux (interior component only) -> vrF
341     IF (momViscosity.AND..NOT.implicitViscosity)
342     & CALL MOM_U_RVISCFLUX(bi,bj,k,uVel,KappaRU,vrF,myThid)
343    
344     C Combine fluxes
345     DO j=jMin,jMax
346     DO i=iMin,iMax
347     fVerU(i,j,kDown) = rVelDudrFac*aF(i,j) + ArDudrFac*vrF(i,j)
348     ENDDO
349     ENDDO
350    
351     C--- Hydrostatic term ( -1/rhoConst . dphi/dx )
352     IF (momPressureForcing) THEN
353     DO j=jMin,jMax
354     DO i=iMin,iMax
355     pf(i,j) = - _recip_dxC(i,j,bi,bj)
356     & *(phi_hyd(i,j,k)-phi_hyd(i-1,j,k))
357     ENDDO
358     ENDDO
359     ENDIF
360    
361     C-- Tendency is minus divergence of the fluxes + coriolis + pressure term
362     DO j=jMin,jMax
363     DO i=iMin,iMax
364     gU(i,j,k,bi,bj) =
365     #ifdef OLD_UV_GEOM
366     & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)/
367     & ( 0.5 _d 0*(rA(i,j,bi,bj)+rA(i-1,j,bi,bj)) )
368     #else
369     & -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
370     & *recip_rAw(i,j,bi,bj)
371     #endif
372     & *(fZon(i,j ) - fZon(i-1,j)
373     & +fMer(i,j+1) - fMer(i ,j)
374     & +fVerU(i,j,kUp)*rkFac - fVerU(i,j,kDown)*rkFac
375     & )
376     & _PHM( +phxFac * pf(i,j) )
377     ENDDO
378     ENDDO
379    
380 jmc 1.8 #ifdef NONLIN_FRSURF
381     C-- account for 3.D divergence of the flow in rStar coordinate:
382     IF ( momAdvection .AND. select_rStar.GT.0 ) THEN
383     DO j=jMin,jMax
384     DO i=iMin,iMax
385     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
386     & - (rStarExpW(i,j,bi,bj) - 1. _d 0)/deltaTfreesurf
387     & *uVel(i,j,k,bi,bj)
388     ENDDO
389     ENDDO
390     ENDIF
391     IF ( momAdvection .AND. select_rStar.LT.0 ) THEN
392     DO j=jMin,jMax
393     DO i=iMin,iMax
394     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
395     & - rStarDhWDt(i,j,bi,bj)*uVel(i,j,k,bi,bj)
396     ENDDO
397     ENDDO
398     ENDIF
399     #endif /* NONLIN_FRSURF */
400    
401 adcroft 1.1 C-- No-slip and drag BCs appear as body forces in cell abutting topography
402     IF (momViscosity.AND.no_slip_sides) THEN
403     C- No-slip BCs impose a drag at walls...
404     CALL MOM_U_SIDEDRAG(bi,bj,k,uFld,v4F,hFacZ,vF,myThid)
405     DO j=jMin,jMax
406     DO i=iMin,iMax
407     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+vF(i,j)
408     ENDDO
409     ENDDO
410     ENDIF
411     C- No-slip BCs impose a drag at bottom
412     IF (momViscosity.AND.bottomDragTerms) THEN
413     CALL MOM_U_BOTTOMDRAG(bi,bj,k,uFld,KE,KappaRU,vF,myThid)
414     DO j=jMin,jMax
415     DO i=iMin,iMax
416     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+vF(i,j)
417     ENDDO
418     ENDDO
419     ENDIF
420    
421     C-- Forcing term
422     IF (momForcing)
423     & CALL EXTERNAL_FORCING_U(
424     I iMin,iMax,jMin,jMax,bi,bj,k,
425 jmc 1.8 I myTime,myThid)
426 adcroft 1.1
427     C-- Metric terms for curvilinear grid systems
428 adcroft 1.5 IF (useNHMTerms) THEN
429     C o Non-hydrosatic metric terms
430 adcroft 1.1 CALL MOM_U_METRIC_NH(bi,bj,k,uFld,wVel,mT,myThid)
431     DO j=jMin,jMax
432     DO i=iMin,iMax
433     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mTFacU*mT(i,j)
434     ENDDO
435     ENDDO
436 adcroft 1.5 ENDIF
437     IF (usingSphericalPolarMTerms) THEN
438 adcroft 1.1 CALL MOM_U_METRIC_SPHERE(bi,bj,k,uFld,vFld,mT,myThid)
439     DO j=jMin,jMax
440     DO i=iMin,iMax
441     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mTFacU*mT(i,j)
442     ENDDO
443     ENDDO
444     ENDIF
445    
446     C-- Set du/dt on boundaries to zero
447     DO j=jMin,jMax
448     DO i=iMin,iMax
449     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)*_maskW(i,j,k,bi,bj)
450     ENDDO
451     ENDDO
452    
453    
454     C---- Meridional momentum equation starts here
455    
456     C Bi-harmonic term del^2 V -> v4F
457     IF (momViscosity)
458     & CALL MOM_V_DEL2V(bi,bj,k,vFld,hFacZ,v4f,myThid)
459    
460     C--- Calculate mean and eddy fluxes between cells for meridional flow.
461    
462     C-- Zonal flux (fZon is at west face of "v" cell)
463    
464     C Mean flow component of zonal flux -> aF
465     IF (momAdvection)
466     & CALL MOM_V_ADV_UV(bi,bj,k,uTrans,vFld,af,myThid)
467    
468     C Laplacian and bi-harmonic terms -> vF
469     IF (momViscosity)
470     & CALL MOM_V_XVISCFLUX(bi,bj,k,vFld,v4f,hFacZ,vf,myThid)
471    
472     C Combine fluxes -> fZon
473     DO j=jMin,jMax
474     DO i=iMin,iMax
475     fZon(i,j) = uDvdxFac*aF(i,j) + AhDvdxFac*vF(i,j)
476     ENDDO
477     ENDDO
478    
479     C-- Meridional flux (fMer is at north face of "v" cell)
480    
481     C Mean flow component of meridional flux
482     IF (momAdvection)
483     & CALL MOM_V_ADV_VV(bi,bj,k,vTrans,vFld,af,myThid)
484    
485     C Laplacian and bi-harmonic term
486     IF (momViscosity)
487     & CALL MOM_V_YVISCFLUX(bi,bj,k,vFld,v4f,vf,myThid)
488    
489     C Combine fluxes -> fMer
490     DO j=jMin,jMax
491     DO i=iMin,iMax
492     fMer(i,j) = vDvdyFac*aF(i,j) + AhDvdyFac*vF(i,j)
493     ENDDO
494     ENDDO
495    
496     C-- Vertical flux (fVer is at upper face of "v" cell)
497    
498     C o Mean flow component of vertical flux
499     IF (momAdvection)
500 jmc 1.8 & CALL MOM_V_ADV_WV(bi,bj,k+1,vVel,wVel,rTransV,af,myThid)
501 adcroft 1.1
502     C Eddy component of vertical flux (interior component only) -> vrF
503     IF (momViscosity.AND..NOT.implicitViscosity)
504     & CALL MOM_V_RVISCFLUX(bi,bj,k,vVel,KappaRV,vrf,myThid)
505    
506     C Combine fluxes -> fVerV
507     DO j=jMin,jMax
508     DO i=iMin,iMax
509     fVerV(i,j,kDown) = rVelDvdrFac*aF(i,j) + ArDvdrFac*vrF(i,j)
510     ENDDO
511     ENDDO
512    
513     C--- Hydorstatic term (-1/rhoConst . dphi/dy )
514     IF (momPressureForcing) THEN
515     DO j=jMin,jMax
516     DO i=iMin,iMax
517     pF(i,j) = -_recip_dyC(i,j,bi,bj)
518     & *(phi_hyd(i,j,k)-phi_hyd(i,j-1,k))
519     ENDDO
520     ENDDO
521     ENDIF
522    
523     C-- Tendency is minus divergence of the fluxes + coriolis + pressure term
524     DO j=jMin,jMax
525     DO i=iMin,iMax
526     gV(i,j,k,bi,bj) =
527     #ifdef OLD_UV_GEOM
528     & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)/
529     & ( 0.5 _d 0*(_rA(i,j,bi,bj)+_rA(i,j-1,bi,bj)) )
530     #else
531     & -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
532     & *recip_rAs(i,j,bi,bj)
533     #endif
534     & *(fZon(i+1,j) - fZon(i,j )
535     & +fMer(i,j ) - fMer(i,j-1)
536     & +fVerV(i,j,kUp)*rkFac - fVerV(i,j,kDown)*rkFac
537     & )
538     & _PHM( +phyFac*pf(i,j) )
539     ENDDO
540     ENDDO
541    
542 jmc 1.8 #ifdef NONLIN_FRSURF
543     C-- account for 3.D divergence of the flow in rStar coordinate:
544     IF ( momAdvection .AND. select_rStar.GT.0 ) THEN
545     DO j=jMin,jMax
546     DO i=iMin,iMax
547     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
548     & - (rStarExpS(i,j,bi,bj) - 1. _d 0)/deltaTfreesurf
549     & *vVel(i,j,k,bi,bj)
550     ENDDO
551     ENDDO
552     ENDIF
553     IF ( momAdvection .AND. select_rStar.LT.0 ) THEN
554     DO j=jMin,jMax
555     DO i=iMin,iMax
556     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
557     & - rStarDhSDt(i,j,bi,bj)*vVel(i,j,k,bi,bj)
558     ENDDO
559     ENDDO
560     ENDIF
561     #endif /* NONLIN_FRSURF */
562    
563 adcroft 1.1 C-- No-slip and drag BCs appear as body forces in cell abutting topography
564     IF (momViscosity.AND.no_slip_sides) THEN
565     C- No-slip BCs impose a drag at walls...
566     CALL MOM_V_SIDEDRAG(bi,bj,k,vFld,v4F,hFacZ,vF,myThid)
567     DO j=jMin,jMax
568     DO i=iMin,iMax
569     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vF(i,j)
570     ENDDO
571     ENDDO
572     ENDIF
573     C- No-slip BCs impose a drag at bottom
574     IF (momViscosity.AND.bottomDragTerms) THEN
575     CALL MOM_V_BOTTOMDRAG(bi,bj,k,vFld,KE,KappaRV,vF,myThid)
576     DO j=jMin,jMax
577     DO i=iMin,iMax
578     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vF(i,j)
579     ENDDO
580     ENDDO
581     ENDIF
582    
583     C-- Forcing term
584     IF (momForcing)
585     & CALL EXTERNAL_FORCING_V(
586     I iMin,iMax,jMin,jMax,bi,bj,k,
587 jmc 1.8 I myTime,myThid)
588 adcroft 1.1
589     C-- Metric terms for curvilinear grid systems
590 adcroft 1.5 IF (useNHMTerms) THEN
591 adcroft 1.1 C o Spherical polar grid metric terms
592     CALL MOM_V_METRIC_NH(bi,bj,k,vFld,wVel,mT,myThid)
593     DO j=jMin,jMax
594     DO i=iMin,iMax
595     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mTFacV*mT(i,j)
596     ENDDO
597     ENDDO
598 adcroft 1.5 ENDIF
599     IF (usingSphericalPolarMTerms) THEN
600 adcroft 1.1 CALL MOM_V_METRIC_SPHERE(bi,bj,k,uFld,mT,myThid)
601     DO j=jMin,jMax
602     DO i=iMin,iMax
603     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mTFacV*mT(i,j)
604     ENDDO
605     ENDDO
606     ENDIF
607    
608     C-- Set dv/dt on boundaries to zero
609     DO j=jMin,jMax
610     DO i=iMin,iMax
611     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
612     ENDDO
613     ENDDO
614    
615     C-- Coriolis term
616     C Note. As coded here, coriolis will not work with "thin walls"
617     #ifdef INCLUDE_CD_CODE
618     CALL MOM_CDSCHEME(bi,bj,k,phi_hyd,myThid)
619     #else
620     CALL MOM_U_CORIOLIS(bi,bj,k,vFld,cf,myThid)
621     DO j=jMin,jMax
622     DO i=iMin,iMax
623     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
624     ENDDO
625     ENDDO
626     CALL MOM_V_CORIOLIS(bi,bj,k,uFld,cf,myThid)
627     DO j=jMin,jMax
628     DO i=iMin,iMax
629     gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
630     ENDDO
631     ENDDO
632     #endif /* INCLUDE_CD_CODE */
633 adcroft 1.7 IF (nonHydrostatic.OR.quasiHydrostatic) THEN
634 adcroft 1.6 CALL MOM_U_CORIOLIS_NH(bi,bj,k,wVel,cf,myThid)
635     DO j=jMin,jMax
636     DO i=iMin,iMax
637     gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
638     ENDDO
639     ENDDO
640     ENDIF
641 adcroft 1.1
642     RETURN
643     END

  ViewVC Help
Powered by ViewVC 1.1.22