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

Diff of /MITgcm/pkg/mom_vecinv/mom_vecinv.F

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

revision 1.4 by jmc, Sat Feb 8 02:10:57 2003 UTC revision 1.8 by heimbach, Fri Oct 10 23:00:01 2003 UTC
# Line 31  C     == Global variables == Line 31  C     == Global variables ==
31  #include "EEPARAMS.h"  #include "EEPARAMS.h"
32  #include "PARAMS.h"  #include "PARAMS.h"
33  #include "GRID.h"  #include "GRID.h"
34    #ifdef ALLOW_TIMEAVE
35    #include "TIMEAVE_STATV.h"
36    #endif
37    
38  C     == Routine arguments ==  C     == Routine arguments ==
39  C     fVerU   - Flux of momentum in the vertical  C     fVerU   - Flux of momentum in the vertical
# Line 53  C     myThid - Instance number for this Line 56  C     myThid - Instance number for this
56        INTEGER myThid        INTEGER myThid
57        INTEGER bi,bj,iMin,iMax,jMin,jMax        INTEGER bi,bj,iMin,iMax,jMin,jMax
58    
59    #ifndef DISABLE_MOM_VECINV
60    
61  C     == Functions ==  C     == Functions ==
62        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
63        EXTERNAL DIFFERENT_MULTIPLE        EXTERNAL DIFFERENT_MULTIPLE
# Line 73  C     == Local variables == Line 78  C     == Local variables ==
78        _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
79        _RS xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
80        _RS yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS yA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
       _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)  
       _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)  
81        _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL uFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
82        _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
83        _RL dStar(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL dStar(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 146  C     Initialise intermediate terms Line 149  C     Initialise intermediate terms
149          vort3(i,j) = 0.          vort3(i,j) = 0.
150          omega3(i,j) = 0.          omega3(i,j) = 0.
151          ke(i,j) = 0.          ke(i,j) = 0.
152    #ifdef ALLOW_AUTODIFF_TAMC
153            strain(i,j)  = 0. _d 0
154            tension(i,j) = 0. _d 0
155            fVerU(i,j,1) = 0. _d 0
156            fVerU(i,j,2) = 0. _d 0
157            fVerV(i,j,1) = 0. _d 0
158            fVerV(i,j,2) = 0. _d 0
159    #endif
160         ENDDO         ENDDO
161        ENDDO        ENDDO
162    
# Line 212  C     Make local copies of horizontal fl Line 223  C     Make local copies of horizontal fl
223         ENDDO         ENDDO
224        ENDDO        ENDDO
225    
226  C     Calculate velocity field "volume transports" through tracer cell faces.  C note (jmc) : Dissipation and Vort3 advection do not necesary
227        DO j=1-OLy,sNy+OLy  C              use the same maskZ (and hFacZ)  => needs 2 call(s)
228         DO i=1-OLx,sNx+OLx  c     CALL MOM_VI_HFACZ_DISS(bi,bj,k,hFacZ,r_hFacZ,myThid)
         uTrans(i,j) = uFld(i,j)*xA(i,j)  
         vTrans(i,j) = vFld(i,j)*yA(i,j)  
        ENDDO  
       ENDDO  
229    
230        CALL MOM_VI_CALC_KE(bi,bj,k,uFld,vFld,KE,myThid)        CALL MOM_VI_CALC_KE(bi,bj,k,uFld,vFld,KE,myThid)
231    
# Line 226  C     Calculate velocity field "volume t Line 233  C     Calculate velocity field "volume t
233    
234        CALL MOM_VI_CALC_RELVORT3(bi,bj,k,uFld,vFld,hFacZ,vort3,myThid)        CALL MOM_VI_CALC_RELVORT3(bi,bj,k,uFld,vFld,hFacZ,vort3,myThid)
235    
236        CALL MOM_VI_CALC_ABSVORT3(bi,bj,k,vort3,omega3,myThid)  c     CALL MOM_VI_CALC_ABSVORT3(bi,bj,k,vort3,omega3,myThid)
237    
238        IF (momViscosity) THEN        IF (momViscosity) THEN
239  C      Calculate del^2 u and del^2 v for bi-harmonic term  C      Calculate del^2 u and del^2 v for bi-harmonic term
# Line 260  C      or in terms of tension and strain Line 267  C      or in terms of tension and strain
267         ENDIF         ENDIF
268        ENDIF        ENDIF
269    
270    C-    Return to standard hfacZ (min-4) and mask vort3 accordingly:
271    c     CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid)
272    
273  C---- Zonal momentum equation starts here  C---- Zonal momentum equation starts here
274    
275  C--   Vertical flux (fVer is at upper face of "u" cell)  C--   Vertical flux (fVer is at upper face of "u" cell)
# Line 298  C-     No-slip BCs impose a drag at wall Line 308  C-     No-slip BCs impose a drag at wall
308          ENDDO          ENDDO
309         ENDDO         ENDDO
310        ENDIF        ENDIF
311    
312  C-    No-slip BCs impose a drag at bottom  C-    No-slip BCs impose a drag at bottom
313        IF (momViscosity.AND.bottomDragTerms) THEN        IF (momViscosity.AND.bottomDragTerms) THEN
314         CALL MOM_U_BOTTOMDRAG(bi,bj,k,uFld,KE,KappaRU,vF,myThid)         CALL MOM_U_BOTTOMDRAG(bi,bj,k,uFld,KE,KappaRU,vF,myThid)
# Line 308  C-    No-slip BCs impose a drag at botto Line 319  C-    No-slip BCs impose a drag at botto
319         ENDDO         ENDDO
320        ENDIF        ENDIF
321    
 C--   Forcing term  
       IF (momForcing)  
      &  CALL EXTERNAL_FORCING_U(  
      I     iMin,iMax,jMin,jMax,bi,bj,k,  
      I     myCurrentTime,myThid)  
   
322  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
323  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
324  C      o Spherical polar grid metric terms  C      o Spherical polar grid metric terms
# Line 325  c       ENDDO Line 330  c       ENDDO
330  c      ENDDO  c      ENDDO
331  c     ENDIF  c     ENDIF
332    
 C--   Set du/dt on boundaries to zero  
       DO j=jMin,jMax  
        DO i=iMin,iMax  
         gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)*_maskW(i,j,k,bi,bj)  
        ENDDO  
       ENDDO  
   
   
333  C---- Meridional momentum equation starts here  C---- Meridional momentum equation starts here
334    
335  C--   Vertical flux (fVer is at upper face of "v" cell)  C--   Vertical flux (fVer is at upper face of "v" cell)
# Line 381  C-    No-slip BCs impose a drag at botto Line 378  C-    No-slip BCs impose a drag at botto
378         ENDDO         ENDDO
379        ENDIF        ENDIF
380    
 C--   Forcing term  
       IF (momForcing)  
      & CALL EXTERNAL_FORCING_V(  
      I     iMin,iMax,jMin,jMax,bi,bj,k,  
      I     myCurrentTime,myThid)  
   
381  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
382  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
383  C      o Spherical polar grid metric terms  C      o Spherical polar grid metric terms
# Line 398  c       ENDDO Line 389  c       ENDDO
389  c      ENDDO  c      ENDDO
390  c     ENDIF  c     ENDIF
391    
 C--   Set dv/dt on boundaries to zero  
       DO j=jMin,jMax  
        DO i=iMin,iMax  
         gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)  
        ENDDO  
       ENDDO  
   
392  C--   Horizontal Coriolis terms  C--   Horizontal Coriolis terms
393        CALL MOM_VI_CORIOLIS(bi,bj,K,uFld,vFld,omega3,r_hFacZ,        IF (useCoriolis .AND. .NOT.useCDscheme) THEN
394       &                     uCf,vCf,myThid)         CALL MOM_VI_CORIOLIS(bi,bj,k,uFld,vFld,omega3,hFacZ,r_hFacZ,
395        DO j=jMin,jMax       &                      uCf,vCf,myThid)
396         DO i=iMin,iMax         DO j=jMin,jMax
397          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))          DO i=iMin,iMax
398       &                    *_maskW(i,j,k,bi,bj)           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
399          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
400       &                    *_maskS(i,j,k,bi,bj)          ENDDO
401         ENDDO         ENDDO
402        ENDDO        ENDIF
403  c     CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)  
404        CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)        IF (momAdvection) THEN
405  c     CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)  C--   Horizontal advection of relative vorticity
406        DO j=jMin,jMax  c      CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)
407         DO i=iMin,iMax         CALL MOM_VI_U_CORIOLIS(bi,bj,k,vFld,vort3,hFacZ,r_hFacZ,
408          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))       &                        uCf,myThid)
409       &                    *_maskW(i,j,k,bi,bj)  c      CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)
410           DO j=jMin,jMax
411            DO i=iMin,iMax
412             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
413            ENDDO
414         ENDDO         ENDDO
415        ENDDO  c      CALL MOM_VI_V_CORIOLIS(bi,bj,K,uFld,omega3,r_hFacZ,vCf,myThid)
416  c     CALL MOM_VI_V_CORIOLIS(bi,bj,K,uFld,omega3,r_hFacZ,vCf,myThid)         CALL MOM_VI_V_CORIOLIS(bi,bj,k,uFld,vort3,hFacZ,r_hFacZ,
417        CALL MOM_VI_V_CORIOLIS(bi,bj,K,uFld,vort3,r_hFacZ,vCf,myThid)       &                        vCf,myThid)
418  c     CALL MOM_VI_V_CORIOLIS_C4(bi,bj,K,uFld,vort3,r_hFacZ,vCf,myThid)  c      CALL MOM_VI_V_CORIOLIS_C4(bi,bj,K,uFld,vort3,r_hFacZ,vCf,myThid)
419        DO j=jMin,jMax         DO j=jMin,jMax
420         DO i=iMin,iMax          DO i=iMin,iMax
421          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
422       &                    *_maskS(i,j,k,bi,bj)          ENDDO
423         ENDDO         ENDDO
       ENDDO  
424    
425        IF (momAdvection) THEN  #ifdef ALLOW_TIMEAVE
426  C--   Vertical shear terms (Coriolis)         IF (taveFreq.GT.0.) THEN
427        CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)           CALL TIMEAVE_CUMUL_1K1T(uZetatave,vCf,deltaTClock,
428        DO j=jMin,jMax       &                           Nr, k, bi, bj, myThid)
429         DO i=iMin,iMax           CALL TIMEAVE_CUMUL_1K1T(vZetatave,uCf,deltaTClock,
430          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))       &                           Nr, k, bi, bj, myThid)
431       &                    *_maskW(i,j,k,bi,bj)         ENDIF
432    #endif
433    
434    C--   Vertical shear terms (-w*du/dr & -w*dv/dr)
435           CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)
436           DO j=jMin,jMax
437            DO i=iMin,iMax
438             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
439            ENDDO
440         ENDDO         ENDDO
441        ENDDO         CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)
442        CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)         DO j=jMin,jMax
443        DO j=jMin,jMax          DO i=iMin,iMax
444         DO i=iMin,iMax           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
445          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))          ENDDO
      &                    *_maskS(i,j,k,bi,bj)  
446         ENDDO         ENDDO
       ENDDO  
447    
448  C--   Bernoulli term  C--   Bernoulli term
449        CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)         CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)
450        DO j=jMin,jMax         DO j=jMin,jMax
451         DO i=iMin,iMax          DO i=iMin,iMax
452          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
453       &                    *_maskW(i,j,k,bi,bj)          ENDDO
454         ENDDO         ENDDO
455        ENDDO         CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)
456        CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)         DO j=jMin,jMax
457            DO i=iMin,iMax
458             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
459            ENDDO
460           ENDDO
461    C--   end if momAdvection
462          ENDIF
463    
464    C--   Set du/dt & dv/dt on boundaries to zero
465        DO j=jMin,jMax        DO j=jMin,jMax
466         DO i=iMin,iMax         DO i=iMin,iMax
467          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))          gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)*_maskW(i,j,k,bi,bj)
468       &                    *_maskS(i,j,k,bi,bj)          gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
469         ENDDO         ENDDO
470        ENDDO        ENDDO
471        ENDIF  
472    
473        IF (        IF (
474       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,
# Line 480  C--   Bernoulli term Line 481  C--   Bernoulli term
481         CALL WRITE_LOCAL_RL('Du','I10',1,uDiss,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('Du','I10',1,uDiss,bi,bj,k,myIter,myThid)
482         CALL WRITE_LOCAL_RL('Dv','I10',1,vDiss,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('Dv','I10',1,vDiss,bi,bj,k,myIter,myThid)
483         CALL WRITE_LOCAL_RL('Z3','I10',1,vort3,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('Z3','I10',1,vort3,bi,bj,k,myIter,myThid)
484         CALL WRITE_LOCAL_RL('W3','I10',1,omega3,bi,bj,k,myIter,myThid)  c      CALL WRITE_LOCAL_RL('W3','I10',1,omega3,bi,bj,k,myIter,myThid)
485         CALL WRITE_LOCAL_RL('KE','I10',1,KE,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('KE','I10',1,KE,bi,bj,k,myIter,myThid)
486         CALL WRITE_LOCAL_RL('D','I10',1,hdiv,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('D','I10',1,hdiv,bi,bj,k,myIter,myThid)
487        ENDIF        ENDIF
488    
489    #endif /* DISABLE_MOM_VECINV */
490    
491        RETURN        RETURN
492        END        END

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.22