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

Diff of /MITgcm/pkg/mom_fluxform/mom_fluxform.F

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

revision 1.48 by jmc, Mon Feb 3 22:55:44 2014 UTC revision 1.54 by jmc, Sat Jan 3 23:57:57 2015 UTC
# Line 26  C stresses as well as internal viscous s Line 26  C stresses as well as internal viscous s
26  CEOI  CEOI
27    
28  #include "MOM_FLUXFORM_OPTIONS.h"  #include "MOM_FLUXFORM_OPTIONS.h"
29    #ifdef ALLOW_AUTODIFF
30    # include "AUTODIFF_OPTIONS.h"
31    #endif
32  #ifdef ALLOW_MOM_COMMON  #ifdef ALLOW_MOM_COMMON
33  # include "MOM_COMMON_OPTIONS.h"  # include "MOM_COMMON_OPTIONS.h"
34  #endif  #endif
# Line 36  C !ROUTINE: MOM_FLUXFORM Line 39  C !ROUTINE: MOM_FLUXFORM
39  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
40        SUBROUTINE MOM_FLUXFORM(        SUBROUTINE MOM_FLUXFORM(
41       I        bi,bj,k,iMin,iMax,jMin,jMax,       I        bi,bj,k,iMin,iMax,jMin,jMax,
42       I        KappaRU, KappaRV,       I        kappaRU, kappaRV,
43       U        fVerUkm, fVerVkm,       U        fVerUkm, fVerVkm,
44       O        fVerUkp, fVerVkp,       O        fVerUkp, fVerVkp,
45       O        guDiss, gvDiss,       O        guDiss, gvDiss,
# Line 59  C     == Global variables == Line 62  C     == Global variables ==
62  #ifdef ALLOW_MOM_COMMON  #ifdef ALLOW_MOM_COMMON
63  # include "MOM_VISC.h"  # include "MOM_VISC.h"
64  #endif  #endif
65  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF
66  # include "tamc.h"  # include "tamc.h"
67  # include "tamc_keys.h"  # include "tamc_keys.h"
68  # include "MOM_FLUXFORM.h"  # include "MOM_FLUXFORM.h"
# Line 69  C !INPUT PARAMETERS: =================== Line 72  C !INPUT PARAMETERS: ===================
72  C  bi,bj                :: current tile indices  C  bi,bj                :: current tile indices
73  C  k                    :: current vertical level  C  k                    :: current vertical level
74  C  iMin,iMax,jMin,jMax  :: loop ranges  C  iMin,iMax,jMin,jMax  :: loop ranges
75  C  KappaRU              :: vertical viscosity  C  kappaRU              :: vertical viscosity
76  C  KappaRV              :: vertical viscosity  C  kappaRV              :: vertical viscosity
77  C  fVerUkm              :: vertical advective flux of U, interface above (k-1/2)  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)  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)  C  fVerUkp              :: vertical advective flux of U, interface below (k+1/2)
# Line 82  C  myIter               :: current time- Line 85  C  myIter               :: current time-
85  C  myThid               :: my Thread Id number  C  myThid               :: my Thread Id number
86        INTEGER bi,bj,k        INTEGER bi,bj,k
87        INTEGER iMin,iMax,jMin,jMax        INTEGER iMin,iMax,jMin,jMax
88        _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL kappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
89        _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL kappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1)
90        _RL fVerUkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL fVerUkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
91        _RL fVerVkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL fVerVkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92        _RL fVerUkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL fVerUkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 128  C                     foFacMom - Forcing Line 131  C                     foFacMom - Forcing
131  C                     mtFacMom - Metric term  C                     mtFacMom - Metric term
132  C     uDudxFac, AhDudxFac, etc ... individual term parameters for switching terms off  C     uDudxFac, AhDudxFac, etc ... individual term parameters for switching terms off
133        _RS    hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS    hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
134          _RS   h0FacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
135        _RS  r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS  r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
136        _RS      xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS      xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
137        _RS      yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS      yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 249  C       vorticity at a no-slip boundary Line 253  C       vorticity at a no-slip boundary
253        ENDIF        ENDIF
254    
255        IF (     no_slip_bottom        IF (     no_slip_bottom
256       &    .OR. bottomDragQuadratic.NE.0.       &    .OR. selectBotDragQuadr.GE.0
257       &    .OR. bottomDragLinear.NE.0.) THEN       &    .OR. bottomDragLinear.NE.0.) THEN
258         bottomDragTerms=.TRUE.         bottomDragTerms=.TRUE.
259        ELSE        ELSE
# Line 257  C       vorticity at a no-slip boundary Line 261  C       vorticity at a no-slip boundary
261        ENDIF        ENDIF
262    
263  C--   Calculate open water fraction at vorticity points  C--   Calculate open water fraction at vorticity points
264        CALL MOM_CALC_HFACZ(bi,bj,k,hFacZ,r_hFacZ,myThid)        CALL MOM_CALC_HFACZ( bi,bj,k,hFacZ,r_hFacZ,myThid )
265    
266  C---- Calculate common quantities used in both U and V equations  C---- Calculate common quantities used in both U and V equations
267  C     Calculate tracer cell face open areas  C     Calculate tracer cell face open areas
# Line 267  C     Calculate tracer cell face open ar Line 271  C     Calculate tracer cell face open ar
271       &          *drF(k)*_hFacW(i,j,k,bi,bj)       &          *drF(k)*_hFacW(i,j,k,bi,bj)
272          yA(i,j) = _dxG(i,j,bi,bj)*deepFacC(k)          yA(i,j) = _dxG(i,j,bi,bj)*deepFacC(k)
273       &          *drF(k)*_hFacS(i,j,k,bi,bj)       &          *drF(k)*_hFacS(i,j,k,bi,bj)
274            h0FacZ(i,j) = hFacZ(i,j)
275         ENDDO         ENDDO
276        ENDDO        ENDDO
277    #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    
290  C     Make local copies of horizontal flow field  C     Make local copies of horizontal flow field
291        DO j=1-OLy,sNy+OLy        DO j=1-OLy,sNy+OLy
# Line 287  C     anelastic: transports are scaled b Line 304  C     anelastic: transports are scaled b
304         ENDDO         ENDDO
305        ENDDO        ENDDO
306    
307        CALL MOM_CALC_KE(bi,bj,k,2,uFld,vFld,KE,myThid)        CALL MOM_CALC_KE( bi,bj,k,2,uFld,vFld,KE,myThid )
308        IF ( momViscosity) THEN        IF ( useVariableVisc ) THEN
309          CALL MOM_CALC_HDIV(bi,bj,k,2,uFld,vFld,hDiv,myThid)          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)          CALL MOM_CALC_RELVORT3( bi,bj,k,uFld,vFld,hFacZ,vort3,myThid )
311          CALL MOM_CALC_TENSION(bi,bj,k,uFld,vFld,tension,myThid)          CALL MOM_CALC_TENSION( bi,bj,k,uFld,vFld,tension,myThid )
312          CALL MOM_CALC_STRAIN(bi,bj,k,uFld,vFld,hFacZ,strain,myThid)          CALL MOM_CALC_STRAIN( bi,bj,k,uFld,vFld,hFacZ,strain,myThid )
313          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
314           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
315             IF ( hFacZ(i,j).EQ.0. ) THEN             IF ( hFacZ(i,j).EQ.0. ) THEN
# Line 338  CADJ &     comlev1_bibj_k, key = imomkey Line 355  CADJ &     comlev1_bibj_k, key = imomkey
355  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
356          CALL MOM_CALC_RTRANS( k, bi, bj,          CALL MOM_CALC_RTRANS( k, bi, bj,
357       O                        rTransU, rTransV,       O                        rTransU, rTransV,
358       I                        myTime, myIter, myThid)       I                        myTime, myIter, myThid )
359    
360  C-    Free surface correction term (flux at k=1)  C-    Free surface correction term (flux at k=1)
361          CALL MOM_U_ADV_WU( bi,bj,k,uVel,wVel,rTransU,          CALL MOM_U_ADV_WU( bi,bj,k,uVel,wVel,rTransU,
# Line 354  C---  Calculate vertical transports (at Line 371  C---  Calculate vertical transports (at
371        IF (momAdvection) THEN        IF (momAdvection) THEN
372          CALL MOM_CALC_RTRANS( k+1, bi, bj,          CALL MOM_CALC_RTRANS( k+1, bi, bj,
373       O                        rTransU, rTransV,       O                        rTransU, rTransV,
374       I                        myTime, myIter, myThid)       I                        myTime, myIter, myThid )
375        ENDIF        ENDIF
376    
377  #ifdef MOM_BOUNDARY_CONSERVE  #ifdef MOM_BOUNDARY_CONSERVE
# Line 402  C---  Calculate mean fluxes (advection) Line 419  C---  Calculate mean fluxes (advection)
419  #else /* MOM_BOUNDARY_CONSERVE */  #else /* MOM_BOUNDARY_CONSERVE */
420  C--   Zonal flux (fZon is at east face of "u" cell)  C--   Zonal flux (fZon is at east face of "u" cell)
421  C     Mean flow component of zonal flux -> fZon  C     Mean flow component of zonal flux -> fZon
422          CALL MOM_U_ADV_UU(bi,bj,k,uTrans,uFld,fZon,myThid)          CALL MOM_U_ADV_UU( bi,bj,k,uTrans,uFld,fZon,myThid )
423    
424  C--   Meridional flux (fMer is at south face of "u" cell)  C--   Meridional flux (fMer is at south face of "u" cell)
425  C     Mean flow component of meridional flux -> fMer  C     Mean flow component of meridional flux -> fMer
426          CALL MOM_U_ADV_VU(bi,bj,k,vTrans,uFld,fMer,myThid)          CALL MOM_U_ADV_VU( bi,bj,k,vTrans,uFld,fMer,myThid )
427    
428  C--   Vertical flux (fVer is at upper face of "u" cell)  C--   Vertical flux (fVer is at upper face of "u" cell)
429  C     Mean flow component of vertical flux (at k+1) -> fVer  C     Mean flow component of vertical flux (at k+1) -> fVer
# Line 448  C-- account for 3.D divergence of the fl Line 465  C-- account for 3.D divergence of the fl
465           DO j=jMin,jMax           DO j=jMin,jMax
466            DO i=iMin,iMax            DO i=iMin,iMax
467             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)
468       &     - (rStarExpW(i,j,bi,bj) - 1. _d 0)/deltaTfreesurf       &     - (rStarExpW(i,j,bi,bj) - 1. _d 0)/deltaTFreeSurf
469       &       *uVel(i,j,k,bi,bj)       &       *uVel(i,j,k,bi,bj)
470            ENDDO            ENDDO
471           ENDDO           ENDDO
# Line 494  C---  Calculate eddy fluxes (dissipation Line 511  C---  Calculate eddy fluxes (dissipation
511    
512  C     Bi-harmonic term del^2 U -> v4F  C     Bi-harmonic term del^2 U -> v4F
513          IF ( useBiharmonicVisc )          IF ( useBiharmonicVisc )
514       &  CALL MOM_U_DEL2U(bi,bj,k,uFld,hFacZ,v4f,myThid)       &  CALL MOM_U_DEL2U( bi, bj, k, uFld, hFacZ, h0FacZ,
515         O                    v4f, myThid )
516    
517  C     Laplacian and bi-harmonic terms, Zonal  Fluxes -> fZon  C     Laplacian and bi-harmonic terms, Zonal  Fluxes -> fZon
518          CALL MOM_U_XVISCFLUX(bi,bj,k,uFld,v4F,fZon,          CALL MOM_U_XVISCFLUX( bi,bj,k,uFld,v4F,fZon,
519       I    viscAh_D,viscA4_D,myThid)       I                        viscAh_D,viscA4_D,myThid )
520    
521  C     Laplacian and bi-harmonic termis, Merid Fluxes -> fMer  C     Laplacian and bi-harmonic termis, Merid Fluxes -> fMer
522          CALL MOM_U_YVISCFLUX(bi,bj,k,uFld,v4F,hFacZ,fMer,          CALL MOM_U_YVISCFLUX( bi,bj,k,uFld,v4F,hFacZ,fMer,
523       I    viscAh_Z,viscA4_Z,myThid)       I                        viscAh_Z,viscA4_Z,myThid )
524    
525  C     Eddy component of vertical flux (interior component only) -> fVrUp & fVrDw  C     Eddy component of vertical flux (interior component only) -> fVrUp & fVrDw
526         IF (.NOT.implicitViscosity) THEN         IF (.NOT.implicitViscosity) THEN
527          CALL MOM_U_RVISCFLUX(bi,bj, k, uVel,KappaRU,fVrUp,myThid)          CALL MOM_U_RVISCFLUX( bi,bj, k, uVel,kappaRU,fVrUp,myThid )
528          CALL MOM_U_RVISCFLUX(bi,bj,k+1,uVel,KappaRU,fVrDw,myThid)          CALL MOM_U_RVISCFLUX( bi,bj,k+1,uVel,kappaRU,fVrDw,myThid )
529         ENDIF         ENDIF
530    
531  C--   Tendency is minus divergence of the fluxes  C--   Tendency is minus divergence of the fluxes
# Line 543  C-- No-slip and drag BCs appear as body Line 561  C-- No-slip and drag BCs appear as body
561          IF (no_slip_sides) THEN          IF (no_slip_sides) THEN
562  C-     No-slip BCs impose a drag at walls...  C-     No-slip BCs impose a drag at walls...
563           CALL MOM_U_SIDEDRAG( bi, bj, k,           CALL MOM_U_SIDEDRAG( bi, bj, k,
564       I        uFld, v4f, hFacZ,       I        uFld, v4f, h0FacZ,
565       I        viscAh_Z, viscA4_Z,       I        viscAh_Z, viscA4_Z,
566       I        useHarmonicVisc, useBiharmonicVisc, useVariableVisc,       I        useHarmonicVisc, useBiharmonicVisc, useVariableVisc,
567       O        vF,       O        vF,
# Line 556  C-     No-slip BCs impose a drag at wall Line 574  C-     No-slip BCs impose a drag at wall
574          ENDIF          ENDIF
575  C-    No-slip BCs impose a drag at bottom  C-    No-slip BCs impose a drag at bottom
576          IF (bottomDragTerms) THEN          IF (bottomDragTerms) THEN
577           CALL MOM_U_BOTTOMDRAG(bi,bj,k,uFld,KE,KappaRU,vF,myThid)           CALL MOM_U_BOTTOMDRAG( bi, bj, k,
578         I              uFld, vFld, KE, kappaRU,
579         O              vF,
580         I              myThid )
581           DO j=jMin,jMax           DO j=jMin,jMax
582            DO i=iMin,iMax            DO i=iMin,iMax
583             gUdiss(i,j) = gUdiss(i,j) + vF(i,j)             gUdiss(i,j) = gUdiss(i,j) + vF(i,j)
# Line 566  C-    No-slip BCs impose a drag at botto Line 587  C-    No-slip BCs impose a drag at botto
587    
588  #ifdef ALLOW_SHELFICE  #ifdef ALLOW_SHELFICE
589          IF (useShelfIce) THEN          IF (useShelfIce) THEN
590           CALL SHELFICE_U_DRAG(bi,bj,k,uFld,KE,KappaRU,vF,myThid)           CALL SHELFICE_U_DRAG( bi, bj, k,
591         I              uFld, vFld, KE, kappaRU,
592         O              vF,
593         I              myThid )
594           DO j=jMin,jMax           DO j=jMin,jMax
595            DO i=iMin,iMax            DO i=iMin,iMax
596             gUdiss(i,j) = gUdiss(i,j) + vF(i,j)             gUdiss(i,j) = gUdiss(i,j) + vF(i,j)
# Line 587  c    I     myTime,myThid) Line 611  c    I     myTime,myThid)
611  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
612        IF (useNHMTerms) THEN        IF (useNHMTerms) THEN
613  C      o Non-Hydrostatic (spherical) metric terms  C      o Non-Hydrostatic (spherical) metric terms
614         CALL MOM_U_METRIC_NH(bi,bj,k,uFld,wVel,mT,myThid)         CALL MOM_U_METRIC_NH( bi,bj,k,uFld,wVel,mT,myThid )
615         DO j=jMin,jMax         DO j=jMin,jMax
616          DO i=iMin,iMax          DO i=iMin,iMax
617           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtNHFacU*mT(i,j)           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtNHFacU*mT(i,j)
# Line 596  C      o Non-Hydrostatic (spherical) met Line 620  C      o Non-Hydrostatic (spherical) met
620        ENDIF        ENDIF
621        IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN        IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
622  C      o Spherical polar grid metric terms  C      o Spherical polar grid metric terms
623         CALL MOM_U_METRIC_SPHERE(bi,bj,k,uFld,vFld,mT,myThid)         CALL MOM_U_METRIC_SPHERE( bi,bj,k,uFld,vFld,mT,myThid )
624         DO j=jMin,jMax         DO j=jMin,jMax
625          DO i=iMin,iMax          DO i=iMin,iMax
626           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
# Line 605  C      o Spherical polar grid metric ter Line 629  C      o Spherical polar grid metric ter
629        ENDIF        ENDIF
630        IF ( usingCylindricalGrid .AND. metricTerms ) THEN        IF ( usingCylindricalGrid .AND. metricTerms ) THEN
631  C      o Cylindrical grid metric terms  C      o Cylindrical grid metric terms
632         CALL MOM_U_METRIC_CYLINDER(bi,bj,k,uFld,vFld,mT,myThid)         CALL MOM_U_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
633         DO j=jMin,jMax         DO j=jMin,jMax
634          DO i=iMin,iMax          DO i=iMin,iMax
635           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mtFacU*mT(i,j)
# Line 674  C-- account for 3.D divergence of the fl Line 698  C-- account for 3.D divergence of the fl
698           DO j=jMin,jMax           DO j=jMin,jMax
699            DO i=iMin,iMax            DO i=iMin,iMax
700             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)
701       &     - (rStarExpS(i,j,bi,bj) - 1. _d 0)/deltaTfreesurf       &     - (rStarExpS(i,j,bi,bj) - 1. _d 0)/deltaTFreeSurf
702       &       *vVel(i,j,k,bi,bj)       &       *vVel(i,j,k,bi,bj)
703            ENDDO            ENDDO
704           ENDDO           ENDDO
# Line 719  C-    endif momAdvection. Line 743  C-    endif momAdvection.
743  C---  Calculate eddy fluxes (dissipation) between cells for meridional flow.  C---  Calculate eddy fluxes (dissipation) between cells for meridional flow.
744  C     Bi-harmonic term del^2 V -> v4F  C     Bi-harmonic term del^2 V -> v4F
745          IF ( useBiharmonicVisc )          IF ( useBiharmonicVisc )
746       &  CALL MOM_V_DEL2V(bi,bj,k,vFld,hFacZ,v4f,myThid)       &  CALL MOM_V_DEL2V( bi, bj, k, vFld, hFacZ, h0FacZ,
747         O                    v4f, myThid )
748    
749  C     Laplacian and bi-harmonic terms, Zonal  Fluxes -> fZon  C     Laplacian and bi-harmonic terms, Zonal  Fluxes -> fZon
750          CALL MOM_V_XVISCFLUX(bi,bj,k,vFld,v4f,hFacZ,fZon,          CALL MOM_V_XVISCFLUX( bi,bj,k,vFld,v4f,hFacZ,fZon,
751       I    viscAh_Z,viscA4_Z,myThid)       I                        viscAh_Z,viscA4_Z,myThid )
752    
753  C     Laplacian and bi-harmonic termis, Merid Fluxes -> fMer  C     Laplacian and bi-harmonic termis, Merid Fluxes -> fMer
754          CALL MOM_V_YVISCFLUX(bi,bj,k,vFld,v4f,fMer,          CALL MOM_V_YVISCFLUX( bi,bj,k,vFld,v4f,fMer,
755       I    viscAh_D,viscA4_D,myThid)       I                        viscAh_D,viscA4_D,myThid )
756    
757  C     Eddy component of vertical flux (interior component only) -> fVrUp & fVrDw  C     Eddy component of vertical flux (interior component only) -> fVrUp & fVrDw
758         IF (.NOT.implicitViscosity) THEN         IF (.NOT.implicitViscosity) THEN
759          CALL MOM_V_RVISCFLUX(bi,bj, k, vVel,KappaRV,fVrUp,myThid)          CALL MOM_V_RVISCFLUX( bi,bj, k, vVel,KappaRV,fVrUp,myThid )
760          CALL MOM_V_RVISCFLUX(bi,bj,k+1,vVel,KappaRV,fVrDw,myThid)          CALL MOM_V_RVISCFLUX( bi,bj,k+1,vVel,KappaRV,fVrDw,myThid )
761         ENDIF         ENDIF
762    
763  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
# Line 768  C-- No-slip and drag BCs appear as body Line 793  C-- No-slip and drag BCs appear as body
793          IF (no_slip_sides) THEN          IF (no_slip_sides) THEN
794  C-     No-slip BCs impose a drag at walls...  C-     No-slip BCs impose a drag at walls...
795           CALL MOM_V_SIDEDRAG( bi, bj, k,           CALL MOM_V_SIDEDRAG( bi, bj, k,
796       I        vFld, v4f, hFacZ,       I        vFld, v4f, h0FacZ,
797       I        viscAh_Z,viscA4_Z,       I        viscAh_Z, viscA4_Z,
798       I        useHarmonicVisc, useBiharmonicVisc, useVariableVisc,       I        useHarmonicVisc, useBiharmonicVisc, useVariableVisc,
799       O        vF,       O        vF,
800       I        myThid )       I        myThid )
# Line 781  C-     No-slip BCs impose a drag at wall Line 806  C-     No-slip BCs impose a drag at wall
806          ENDIF          ENDIF
807  C-    No-slip BCs impose a drag at bottom  C-    No-slip BCs impose a drag at bottom
808          IF (bottomDragTerms) THEN          IF (bottomDragTerms) THEN
809           CALL MOM_V_BOTTOMDRAG(bi,bj,k,vFld,KE,KappaRV,vF,myThid)           CALL MOM_V_BOTTOMDRAG( bi, bj, k,
810         I              uFld, vFld, KE, kappaRV,
811         O              vF,
812         I              myThid )
813           DO j=jMin,jMax           DO j=jMin,jMax
814            DO i=iMin,iMax            DO i=iMin,iMax
815             gvDiss(i,j) = gvDiss(i,j) + vF(i,j)             gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
# Line 791  C-    No-slip BCs impose a drag at botto Line 819  C-    No-slip BCs impose a drag at botto
819    
820  #ifdef ALLOW_SHELFICE  #ifdef ALLOW_SHELFICE
821          IF (useShelfIce) THEN          IF (useShelfIce) THEN
822           CALL SHELFICE_V_DRAG(bi,bj,k,vFld,KE,KappaRV,vF,myThid)           CALL SHELFICE_V_DRAG( bi, bj, k,
823         I              uFld, vFld, KE, kappaRV,
824         O              vF,
825         I              myThid )
826           DO j=jMin,jMax           DO j=jMin,jMax
827            DO i=iMin,iMax            DO i=iMin,iMax
828             gvDiss(i,j) = gvDiss(i,j) + vF(i,j)             gvDiss(i,j) = gvDiss(i,j) + vF(i,j)
# Line 812  c    I     myTime,myThid) Line 843  c    I     myTime,myThid)
843  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
844        IF (useNHMTerms) THEN        IF (useNHMTerms) THEN
845  C      o Non-Hydrostatic (spherical) metric terms  C      o Non-Hydrostatic (spherical) metric terms
846         CALL MOM_V_METRIC_NH(bi,bj,k,vFld,wVel,mT,myThid)         CALL MOM_V_METRIC_NH( bi,bj,k,vFld,wVel,mT,myThid )
847         DO j=jMin,jMax         DO j=jMin,jMax
848          DO i=iMin,iMax          DO i=iMin,iMax
849           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtNHFacV*mT(i,j)           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtNHFacV*mT(i,j)
# Line 821  C      o Non-Hydrostatic (spherical) met Line 852  C      o Non-Hydrostatic (spherical) met
852        ENDIF        ENDIF
853        IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN        IF ( usingSphericalPolarGrid .AND. metricTerms ) THEN
854  C      o Spherical polar grid metric terms  C      o Spherical polar grid metric terms
855         CALL MOM_V_METRIC_SPHERE(bi,bj,k,uFld,mT,myThid)         CALL MOM_V_METRIC_SPHERE( bi,bj,k,uFld,mT,myThid )
856         DO j=jMin,jMax         DO j=jMin,jMax
857          DO i=iMin,iMax          DO i=iMin,iMax
858           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
# Line 830  C      o Spherical polar grid metric ter Line 861  C      o Spherical polar grid metric ter
861        ENDIF        ENDIF
862        IF ( usingCylindricalGrid .AND. metricTerms ) THEN        IF ( usingCylindricalGrid .AND. metricTerms ) THEN
863  C      o Cylindrical grid metric terms  C      o Cylindrical grid metric terms
864         CALL MOM_V_METRIC_CYLINDER(bi,bj,k,uFld,vFld,mT,myThid)         CALL MOM_V_METRIC_CYLINDER( bi,bj,k,uFld,vFld,mT,myThid )
865         DO j=jMin,jMax         DO j=jMin,jMax
866          DO i=iMin,iMax          DO i=iMin,iMax
867           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mtFacV*mT(i,j)
# Line 842  C---+----1----+----2----+----3----+----4 Line 873  C---+----1----+----2----+----3----+----4
873    
874  C--   Coriolis term (call to CD_CODE_SCHEME has been moved to timestep.F)  C--   Coriolis term (call to CD_CODE_SCHEME has been moved to timestep.F)
875        IF (.NOT.useCDscheme) THEN        IF (.NOT.useCDscheme) THEN
876          CALL MOM_U_CORIOLIS(bi,bj,k,vFld,cf,myThid)          CALL MOM_U_CORIOLIS( bi,bj,k,vFld,cf,myThid )
877          DO j=jMin,jMax          DO j=jMin,jMax
878           DO i=iMin,iMax           DO i=iMin,iMax
879            gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)            gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
# Line 852  C--   Coriolis term (call to CD_CODE_SCH Line 883  C--   Coriolis term (call to CD_CODE_SCH
883          IF ( useDiagnostics )          IF ( useDiagnostics )
884       &    CALL DIAGNOSTICS_FILL(cf,'Um_Cori ',k,1,2,bi,bj,myThid)       &    CALL DIAGNOSTICS_FILL(cf,'Um_Cori ',k,1,2,bi,bj,myThid)
885  #endif  #endif
886          CALL MOM_V_CORIOLIS(bi,bj,k,uFld,cf,myThid)          CALL MOM_V_CORIOLIS( bi,bj,k,uFld,cf,myThid )
887          DO j=jMin,jMax          DO j=jMin,jMax
888           DO i=iMin,iMax           DO i=iMin,iMax
889            gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)            gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
# Line 866  C--   Coriolis term (call to CD_CODE_SCH Line 897  C--   Coriolis term (call to CD_CODE_SCH
897    
898  C--   3.D Coriolis term (horizontal momentum, Eastward component: -fprime*w)  C--   3.D Coriolis term (horizontal momentum, Eastward component: -fprime*w)
899        IF ( use3dCoriolis ) THEN        IF ( use3dCoriolis ) THEN
900          CALL MOM_U_CORIOLIS_NH(bi,bj,k,wVel,cf,myThid)          CALL MOM_U_CORIOLIS_NH( bi,bj,k,wVel,cf,myThid )
901          DO j=jMin,jMax          DO j=jMin,jMax
902           DO i=iMin,iMax           DO i=iMin,iMax
903            gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)            gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
# Line 874  C--   3.D Coriolis term (horizontal mome Line 905  C--   3.D Coriolis term (horizontal mome
905          ENDDO          ENDDO
906         IF ( usingCurvilinearGrid ) THEN         IF ( usingCurvilinearGrid ) THEN
907  C-     presently, non zero angleSinC array only supported with Curvilinear-Grid  C-     presently, non zero angleSinC array only supported with Curvilinear-Grid
908          CALL MOM_V_CORIOLIS_NH(bi,bj,k,wVel,cf,myThid)          CALL MOM_V_CORIOLIS_NH( bi,bj,k,wVel,cf,myThid )
909          DO j=jMin,jMax          DO j=jMin,jMax
910           DO i=iMin,iMax           DO i=iMin,iMax
911            gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)            gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
# Line 900  C--   Set du/dt & dv/dt on boundaries to Line 931  C--   Set du/dt & dv/dt on boundaries to
931       &                               'Um_Advec',k,1,2,bi,bj,myThid)       &                               'Um_Advec',k,1,2,bi,bj,myThid)
932          CALL DIAGNOSTICS_FILL(gV(1-OLx,1-OLy,k,bi,bj),          CALL DIAGNOSTICS_FILL(gV(1-OLx,1-OLy,k,bi,bj),
933       &                               'Vm_Advec',k,1,2,bi,bj,myThid)       &                               'Vm_Advec',k,1,2,bi,bj,myThid)
        IF (momViscosity) THEN  
         CALL DIAGNOSTICS_FILL(guDiss,'Um_Diss ',k,1,2,bi,bj,myThid)  
         CALL DIAGNOSTICS_FILL(gvDiss,'Vm_Diss ',k,1,2,bi,bj,myThid)  
        ENDIF  
934        ENDIF        ENDIF
935  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
936    

Legend:
Removed from v.1.48  
changed lines
  Added in v.1.54

  ViewVC Help
Powered by ViewVC 1.1.22