/[MITgcm]/MITgcm/verification/aim.5l_cs/code/mom_vecinv.F
ViewVC logotype

Diff of /MITgcm/verification/aim.5l_cs/code/mom_vecinv.F

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

revision 1.1.4.1 by adcroft, Tue Feb 26 16:05:07 2002 UTC revision 1.6 by jmc, Sun Aug 3 03:40:27 2003 UTC
# Line 5  C $Name$ Line 5  C $Name$
5    
6        SUBROUTINE MOM_VECINV(        SUBROUTINE MOM_VECINV(
7       I        bi,bj,iMin,iMax,jMin,jMax,k,kUp,kDown,       I        bi,bj,iMin,iMax,jMin,jMax,k,kUp,kDown,
8       I        phi_hyd,KappaRU,KappaRV,       I        dPhiHydX,dPhiHydY,KappaRU,KappaRV,
9       U        fVerU, fVerV,       U        fVerU, fVerV,
10       I        myCurrentTime, myIter, myThid)       I        myCurrentTime, myIter, myThid)
11  C     /==========================================================\  C     /==========================================================\
# Line 36  C     == Routine arguments == Line 36  C     == Routine arguments ==
36  C     fVerU   - Flux of momentum in the vertical  C     fVerU   - Flux of momentum in the vertical
37  C     fVerV     direction out of the upper face of a cell K  C     fVerV     direction out of the upper face of a cell K
38  C               ( flux into the cell above ).  C               ( flux into the cell above ).
39  C     phi_hyd - Hydrostatic pressure  C     dPhiHydX,Y :: Gradient (X & Y dir.) of Hydrostatic Potential
40  C     bi, bj, iMin, iMax, jMin, jMax - Range of points for which calculation  C     bi, bj, iMin, iMax, jMin, jMax - Range of points for which calculation
41  C                                      results will be set.  C                                      results will be set.
42  C     kUp, kDown                     - Index for upper and lower layers.  C     kUp, kDown                     - Index for upper and lower layers.
43  C     myThid - Instance number for this innvocation of CALC_MOM_RHS  C     myThid - Instance number for this innvocation of CALC_MOM_RHS
44        _RL phi_hyd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL dPhiHydX(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
45          _RL dPhiHydY(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
46        _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
47        _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
48        _RL fVerU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
# Line 263  C      or in terms of tension and strain Line 264  C      or in terms of tension and strain
264         ENDIF         ENDIF
265        ENDIF        ENDIF
266    
267  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C-    Return to standard hfacZ (min-4) and mask vort3 accordingly:
268  c     include 'mom_vecinv.inc'        CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid)
 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  
269    
270  C---- Zonal momentum equation starts here  C---- Zonal momentum equation starts here
271    
# Line 282  C     Combine fluxes Line 282  C     Combine fluxes
282         ENDDO         ENDDO
283        ENDDO        ENDDO
284    
 C---  Hydrostatic term ( -1/rhoConst . dphi/dx )  
       IF (momPressureForcing) THEN  
        DO j=1-Olx,sNy+Oly  
         DO i=2-Olx,sNx+Olx  
          pf(i,j) = - _recip_dxC(i,j,bi,bj)  
      &    *(phi_hyd(i,j,k)-phi_hyd(i-1,j,k))  
         ENDDO  
        ENDDO  
       ENDIF  
   
285  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
286        DO j=2-Oly,sNy+Oly-1        DO j=2-Oly,sNy+Oly-1
287         DO i=2-Olx,sNx+Olx-1         DO i=2-Olx,sNx+Olx-1
# Line 301  C--   Tendency is minus divergence of th Line 291  C--   Tendency is minus divergence of th
291       &  *(       &  *(
292       &   +fVerU(i,j,kUp)*rkFac - fVerU(i,j,kDown)*rkFac       &   +fVerU(i,j,kUp)*rkFac - fVerU(i,j,kDown)*rkFac
293       &   )       &   )
294       & _PHM( +phxFac * pf(i,j) )       &  - phxFac*dPhiHydX(i,j)
295         ENDDO         ENDDO
296        ENDDO        ENDDO
297    
# Line 325  C-    No-slip BCs impose a drag at botto Line 315  C-    No-slip BCs impose a drag at botto
315         ENDDO         ENDDO
316        ENDIF        ENDIF
317    
318  C--   Forcing term  C--   Forcing term (moved to timestep.F)
319        IF (momForcing)  c     IF (momForcing)
320       &  CALL EXTERNAL_FORCING_U(  c    &  CALL EXTERNAL_FORCING_U(
321       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
322       I     myCurrentTime,myThid)  c    I     myCurrentTime,myThid)
323    
324  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
325  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
# Line 342  c       ENDDO Line 332  c       ENDDO
332  c      ENDDO  c      ENDDO
333  c     ENDIF  c     ENDIF
334    
 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  
   
335    
336  C---- Meridional momentum equation starts here  C---- Meridional momentum equation starts here
337    
# Line 365  C     Combine fluxes -> fVerV Line 348  C     Combine fluxes -> fVerV
348         ENDDO         ENDDO
349        ENDDO        ENDDO
350    
 C---  Hydorstatic term (-1/rhoConst . dphi/dy )  
       IF (momPressureForcing) THEN  
        DO j=jMin,jMax  
         DO i=iMin,iMax  
          pF(i,j) = -_recip_dyC(i,j,bi,bj)  
      &    *(phi_hyd(i,j,k)-phi_hyd(i,j-1,k))  
         ENDDO  
        ENDDO  
       ENDIF  
   
351  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
352        DO j=jMin,jMax        DO j=jMin,jMax
353         DO i=iMin,iMax         DO i=iMin,iMax
# Line 384  C--   Tendency is minus divergence of th Line 357  C--   Tendency is minus divergence of th
357       &  *(       &  *(
358       &   +fVerV(i,j,kUp)*rkFac - fVerV(i,j,kDown)*rkFac       &   +fVerV(i,j,kUp)*rkFac - fVerV(i,j,kDown)*rkFac
359       &   )       &   )
360       & _PHM( +phyFac*pf(i,j) )       &  - phyFac*dPhiHydY(i,j)
361         ENDDO         ENDDO
362        ENDDO        ENDDO
363    
# Line 408  C-    No-slip BCs impose a drag at botto Line 381  C-    No-slip BCs impose a drag at botto
381         ENDDO         ENDDO
382        ENDIF        ENDIF
383    
384  C--   Forcing term  C--   Forcing term (moved to timestep.F)
385        IF (momForcing)  c     IF (momForcing)
386       & CALL EXTERNAL_FORCING_V(  c    & CALL EXTERNAL_FORCING_V(
387       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
388       I     myCurrentTime,myThid)  c    I     myCurrentTime,myThid)
389    
390  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
391  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
# Line 425  c       ENDDO Line 398  c       ENDDO
398  c      ENDDO  c      ENDDO
399  c     ENDIF  c     ENDIF
400    
 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  
   
401  C--   Horizontal Coriolis terms  C--   Horizontal Coriolis terms
402        CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid)        IF (useCoriolis .AND. .NOT.useCDscheme) THEN
403  c     CALL MOM_VI_CALC_ABSVORT3(bi,bj,k,vort3,omega3,myThid)         CALL MOM_VI_CORIOLIS(bi,bj,k,uFld,vFld,omega3,hFacZ,r_hFacZ,
404        CALL MOM_VI_CORIOLIS(bi,bj,k,uFld,vFld,omega3,hFacZ,r_hFacZ,       &                      uCf,vCf,myThid)
405       &                     uCf,vCf,myThid)         DO j=jMin,jMax
406        DO j=jMin,jMax          DO i=iMin,iMax
407         DO i=iMin,iMax           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
408          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
409       &                    *_maskW(i,j,k,bi,bj)          ENDDO
         gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))  
      &                    *_maskS(i,j,k,bi,bj)  
410         ENDDO         ENDDO
411        ENDDO        ENDIF
412  c     CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)  
413        CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,vort3,hFacZ,r_hFacZ,        IF (momAdvection) THEN
414       &                       uCf,myThid)  C-     moved before calling U,V _SIDEDRAG:
415  c     CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)  c      CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid)
416        DO j=jMin,jMax  C--   Horizontal advection of relative vorticity
417         DO i=iMin,iMax  c      CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)
418          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))         CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,vort3,hFacZ,r_hFacZ,
419       &                    *_maskW(i,j,k,bi,bj)       &                        uCf,myThid)
420    c      CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)
421           DO j=jMin,jMax
422            DO i=iMin,iMax
423             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
424            ENDDO
425         ENDDO         ENDDO
426        ENDDO  c      CALL MOM_VI_V_CORIOLIS(bi,bj,K,uFld,omega3,r_hFacZ,vCf,myThid)
427  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,
       CALL MOM_VI_V_CORIOLIS(bi,bj,K,uFld,vort3,hFacZ,r_hFacZ,  
428       &                       vCf,myThid)       &                       vCf,myThid)
429  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)
430        DO j=jMin,jMax         DO j=jMin,jMax
431         DO i=iMin,iMax          DO i=iMin,iMax
432          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)
433       &                    *_maskS(i,j,k,bi,bj)          ENDDO
434         ENDDO         ENDDO
       ENDDO  
435    
436        IF (momAdvection) THEN  C--   Vertical shear terms (-w*du/dr & -w*dv/dr)
437  C--   Vertical shear terms (Coriolis)         CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)
438        CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)         DO j=jMin,jMax
439        DO j=jMin,jMax          DO i=iMin,iMax
440         DO i=iMin,iMax           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
441          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))          ENDDO
      &                    *_maskW(i,j,k,bi,bj)  
442         ENDDO         ENDDO
443        ENDDO         CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)
444        CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)         DO j=jMin,jMax
445        DO j=jMin,jMax          DO i=iMin,iMax
446         DO i=iMin,iMax           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
447          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))          ENDDO
      &                    *_maskS(i,j,k,bi,bj)  
448         ENDDO         ENDDO
       ENDDO  
449    
450  C--   Bernoulli term  C--   Bernoulli term
451        CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)         CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)
452        DO j=jMin,jMax         DO j=jMin,jMax
453         DO i=iMin,iMax          DO i=iMin,iMax
454          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)
455       &                    *_maskW(i,j,k,bi,bj)          ENDDO
456         ENDDO         ENDDO
457        ENDDO         CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)
458        CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)         DO j=jMin,jMax
459            DO i=iMin,iMax
460             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
461            ENDDO
462           ENDDO
463    C--   end if momAdvection
464          ENDIF
465    
466    C--   Set du/dt & dv/dt on boundaries to zero
467        DO j=jMin,jMax        DO j=jMin,jMax
468         DO i=iMin,iMax         DO i=iMin,iMax
469          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)
470       &                    *_maskS(i,j,k,bi,bj)          gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
471         ENDDO         ENDDO
472        ENDDO        ENDDO
473        ENDIF  
474    
475        IF (        IF (
476       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,
477       &                     myCurrentTime-deltaTClock)       &                     myCurrentTime-deltaTClock)
478       & ) THEN       & ) THEN
        CALL WRITE_LOCAL_RL('Ph','I10',Nr,phi_hyd,bi,bj,1,myIter,myThid)  
479         CALL WRITE_LOCAL_RL('Ds','I10',1,strain,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('Ds','I10',1,strain,bi,bj,k,myIter,myThid)
480         CALL WRITE_LOCAL_RL('Dt','I10',1,tension,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('Dt','I10',1,tension,bi,bj,k,myIter,myThid)
481         CALL WRITE_LOCAL_RL('fV','I10',1,uCf,bi,bj,k,myIter,myThid)         CALL WRITE_LOCAL_RL('fV','I10',1,uCf,bi,bj,k,myIter,myThid)
# Line 512  C--   Bernoulli term Line 483  C--   Bernoulli term
483         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)
484         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)
485         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)
486         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)
487         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)
488         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)
489        ENDIF        ENDIF

Legend:
Removed from v.1.1.4.1  
changed lines
  Added in v.1.6

  ViewVC Help
Powered by ViewVC 1.1.22