/[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.1 by adcroft, Thu Aug 16 17:16:03 2001 UTC revision 1.5 by jmc, Fri Apr 11 13:35:03 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, myThid)       I        myCurrentTime, myIter, myThid)
11  C     /==========================================================\  C     /==========================================================\
12  C     | S/R MOM_VECINV                                           |  C     | S/R MOM_VECINV                                           |
13  C     | o Form the right hand-side of the momentum equation.     |  C     | o Form the right hand-side of the momentum equation.     |
# 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)
49        _RL fVerV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
50        INTEGER kUp,kDown        INTEGER kUp,kDown
       INTEGER myThid  
51        _RL     myCurrentTime        _RL     myCurrentTime
52          INTEGER myIter
53          INTEGER myThid
54        INTEGER bi,bj,iMin,iMax,jMin,jMax        INTEGER bi,bj,iMin,iMax,jMin,jMax
55    
56    C     == Functions ==
57          LOGICAL  DIFFERENT_MULTIPLE
58          EXTERNAL DIFFERENT_MULTIPLE
59    
60  C     == Local variables ==  C     == Local variables ==
61        _RL      aF (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL      aF (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
62        _RL      vF (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL      vF (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 61  C     == Local variables == Line 67  C     == Local variables ==
67        _RL      pF (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL      pF (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
68        _RL del2u(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL del2u(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
69        _RL del2v(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL del2v(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
70          _RL tension(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
71          _RL strain(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
72        _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
73        _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
74        _RS xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS xA(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 218  C     Calculate velocity field "volume t Line 226  C     Calculate velocity field "volume t
226    
227        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)
228    
229        CALL MOM_VI_CALC_ABSVORT3(bi,bj,k,vort3,omega3,myThid)  c     CALL MOM_VI_CALC_ABSVORT3(bi,bj,k,vort3,omega3,myThid)
230    
231        IF (momViscosity) THEN        IF (momViscosity) THEN
232  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
233         CALL MOM_VI_DEL2UV(         IF (viscA4.NE.0.) THEN
234       I                    bi,bj,k,hDiv,vort3,hFacZ,           CALL MOM_VI_DEL2UV(bi,bj,k,hDiv,vort3,hFacZ,
235       O                    del2u,del2v,       O                      del2u,del2v,
236       &                    myThid)       &                      myThid)
237         CALL MOM_VI_CALC_HDIV(bi,bj,k,del2u,del2v,dStar,myThid)           CALL MOM_VI_CALC_HDIV(bi,bj,k,del2u,del2v,dStar,myThid)
238         CALL MOM_VI_CALC_RELVORT3(bi,bj,k,del2u,del2v,hFacZ,zStar,myThid)           CALL MOM_VI_CALC_RELVORT3(
239         &                         bi,bj,k,del2u,del2v,hFacZ,zStar,myThid)
240           ENDIF
241  C      Calculate dissipation terms for U and V equations  C      Calculate dissipation terms for U and V equations
242         CALL MOM_VI_HDISSIP(  C      in terms of vorticity and divergence
243       I                     bi,bj,k,hDiv,vort3,hFacZ,dStar,zStar,         IF (viscAh.NE.0. .OR. viscA4.NE.0.) THEN
244       O                     uDiss,vDiss,           CALL MOM_VI_HDISSIP(bi,bj,k,hDiv,vort3,hFacZ,dStar,zStar,
245       &                     myThid)       O                       uDiss,vDiss,
246         &                       myThid)
247           ENDIF
248    C      or in terms of tension and strain
249           IF (viscAstrain.NE.0. .OR. viscAtension.NE.0.) THEN
250             CALL MOM_CALC_TENSION(bi,bj,k,uFld,vFld,
251         O                         tension,
252         I                         myThid)
253             CALL MOM_CALC_STRAIN(bi,bj,k,uFld,vFld,hFacZ,
254         O                        strain,
255         I                        myThid)
256             CALL MOM_HDISSIP(bi,bj,k,
257         I                    tension,strain,hFacZ,viscAtension,viscAstrain,
258         O                    uDiss,vDiss,
259         I                    myThid)
260           ENDIF
261        ENDIF        ENDIF
262    
263  C---- Zonal momentum equation starts here  C---- Zonal momentum equation starts here
# Line 250  C     Combine fluxes Line 275  C     Combine fluxes
275         ENDDO         ENDDO
276        ENDDO        ENDDO
277    
 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  
   
278  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
279        DO j=2-Oly,sNy+Oly-1        DO j=2-Oly,sNy+Oly-1
280         DO i=2-Olx,sNx+Olx-1         DO i=2-Olx,sNx+Olx-1
# Line 269  C--   Tendency is minus divergence of th Line 284  C--   Tendency is minus divergence of th
284       &  *(       &  *(
285       &   +fVerU(i,j,kUp)*rkFac - fVerU(i,j,kDown)*rkFac       &   +fVerU(i,j,kUp)*rkFac - fVerU(i,j,kDown)*rkFac
286       &   )       &   )
287       & _PHM( +phxFac * pf(i,j) )       &  - phxFac*dPhiHydX(i,j)
288         ENDDO         ENDDO
289        ENDDO        ENDDO
290    
# Line 310  c       ENDDO Line 325  c       ENDDO
325  c      ENDDO  c      ENDDO
326  c     ENDIF  c     ENDIF
327    
 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  
   
328    
329  C---- Meridional momentum equation starts here  C---- Meridional momentum equation starts here
330    
# Line 333  C     Combine fluxes -> fVerV Line 341  C     Combine fluxes -> fVerV
341         ENDDO         ENDDO
342        ENDDO        ENDDO
343    
 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  
   
344  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
345        DO j=jMin,jMax        DO j=jMin,jMax
346         DO i=iMin,iMax         DO i=iMin,iMax
# Line 352  C--   Tendency is minus divergence of th Line 350  C--   Tendency is minus divergence of th
350       &  *(       &  *(
351       &   +fVerV(i,j,kUp)*rkFac - fVerV(i,j,kDown)*rkFac       &   +fVerV(i,j,kUp)*rkFac - fVerV(i,j,kDown)*rkFac
352       &   )       &   )
353       & _PHM( +phyFac*pf(i,j) )       &  - phyFac*dPhiHydY(i,j)
354         ENDDO         ENDDO
355        ENDDO        ENDDO
356    
# Line 393  c       ENDDO Line 391  c       ENDDO
391  c      ENDDO  c      ENDDO
392  c     ENDIF  c     ENDIF
393    
 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  
   
394  C--   Horizontal Coriolis terms  C--   Horizontal Coriolis terms
395        CALL MOM_VI_CORIOLIS(bi,bj,K,uFld,vFld,omega3,r_hFacZ,        IF (useCoriolis) THEN
396       &                     uCf,vCf,myThid)         CALL MOM_VI_CORIOLIS(bi,bj,K,uFld,vFld,omega3,r_hFacZ,
397        DO j=jMin,jMax       &                      uCf,vCf,myThid)
398         DO i=iMin,iMax         DO j=jMin,jMax
399          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))          DO i=iMin,iMax
400       &                    *_maskW(i,j,k,bi,bj)           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
401          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)
402       &                    *_maskS(i,j,k,bi,bj)          ENDDO
403         ENDDO         ENDDO
404        ENDDO        ENDIF
405  c     CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)  
406        CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)        IF (momAdvection) THEN
407  c     CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)  C--   Horizontal advection of relative vorticity
408        DO j=jMin,jMax  c      CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)
409         DO i=iMin,iMax         CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)
410          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))  c      CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)
411       &                    *_maskW(i,j,k,bi,bj)         DO j=jMin,jMax
412            DO i=iMin,iMax
413             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
414            ENDDO
415         ENDDO         ENDDO
416        ENDDO  c      CALL MOM_VI_V_CORIOLIS(bi,bj,K,uFld,omega3,r_hFacZ,vCf,myThid)
417  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,r_hFacZ,vCf,myThid)
418        CALL MOM_VI_V_CORIOLIS(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  c     CALL MOM_VI_V_CORIOLIS_C4(bi,bj,K,uFld,vort3,r_hFacZ,vCf,myThid)         DO j=jMin,jMax
420        DO j=jMin,jMax          DO i=iMin,iMax
421         DO i=iMin,iMax           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
422          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))          ENDDO
      &                    *_maskS(i,j,k,bi,bj)  
423         ENDDO         ENDDO
       ENDDO  
424    
425        IF (momAdvection) THEN  C--   Vertical shear terms (-w*du/dr & -w*dv/dr)
426  C--   Vertical shear terms (Coriolis)         CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)
427        CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)         DO j=jMin,jMax
428        DO j=jMin,jMax          DO i=iMin,iMax
429         DO i=iMin,iMax           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
430          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))          ENDDO
      &                    *_maskW(i,j,k,bi,bj)  
431         ENDDO         ENDDO
432        ENDDO         CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)
433        CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)         DO j=jMin,jMax
434        DO j=jMin,jMax          DO i=iMin,iMax
435         DO i=iMin,iMax           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
436          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))          ENDDO
      &                    *_maskS(i,j,k,bi,bj)  
437         ENDDO         ENDDO
       ENDDO  
438    
439  C--   Bernoulli term  C--   Bernoulli term
440        CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)         CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)
441        DO j=jMin,jMax         DO j=jMin,jMax
442         DO i=iMin,iMax          DO i=iMin,iMax
443          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)
444       &                    *_maskW(i,j,k,bi,bj)          ENDDO
445         ENDDO         ENDDO
446        ENDDO         CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)
447        CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)         DO j=jMin,jMax
448            DO i=iMin,iMax
449             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
450            ENDDO
451           ENDDO
452    C--   end if momAdvection
453          ENDIF
454    
455    C--   Set du/dt & dv/dt on boundaries to zero
456        DO j=jMin,jMax        DO j=jMin,jMax
457         DO i=iMin,iMax         DO i=iMin,iMax
458          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)
459       &                    *_maskS(i,j,k,bi,bj)          gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
460         ENDDO         ENDDO
461        ENDDO        ENDDO
462    
463    
464          IF (
465         &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,
466         &                     myCurrentTime-deltaTClock)
467         & ) THEN
468           CALL WRITE_LOCAL_RL('Ds','I10',1,strain,bi,bj,k,myIter,myThid)
469           CALL WRITE_LOCAL_RL('Dt','I10',1,tension,bi,bj,k,myIter,myThid)
470           CALL WRITE_LOCAL_RL('fV','I10',1,uCf,bi,bj,k,myIter,myThid)
471           CALL WRITE_LOCAL_RL('fU','I10',1,vCf,bi,bj,k,myIter,myThid)
472           CALL WRITE_LOCAL_RL('Du','I10',1,uDiss,bi,bj,k,myIter,myThid)
473           CALL WRITE_LOCAL_RL('Dv','I10',1,vDiss,bi,bj,k,myIter,myThid)
474           CALL WRITE_LOCAL_RL('Z3','I10',1,vort3,bi,bj,k,myIter,myThid)
475    c      CALL WRITE_LOCAL_RL('W3','I10',1,omega3,bi,bj,k,myIter,myThid)
476           CALL WRITE_LOCAL_RL('KE','I10',1,KE,bi,bj,k,myIter,myThid)
477           CALL WRITE_LOCAL_RL('D','I10',1,hdiv,bi,bj,k,myIter,myThid)
478        ENDIF        ENDIF
479    
480        RETURN        RETURN

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.5

  ViewVC Help
Powered by ViewVC 1.1.22