/[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.3 by adcroft, Thu Sep 6 14:23:58 2001 UTC revision 1.3.6.2 by heimbach, Tue Jun 24 23:09:43 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 225  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
# Line 274  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 293  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 317  C-    No-slip BCs impose a drag at botto Line 308  C-    No-slip BCs impose a drag at botto
308         ENDDO         ENDDO
309        ENDIF        ENDIF
310    
311  C--   Forcing term  C--   Forcing term (moved to timestep.F)
312        IF (momForcing)  c     IF (momForcing)
313       &  CALL EXTERNAL_FORCING_U(  c    &  CALL EXTERNAL_FORCING_U(
314       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
315       I     myCurrentTime,myThid)  c    I     myCurrentTime,myThid)
316    
317  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
318  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
# Line 334  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 357  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 376  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 400  C-    No-slip BCs impose a drag at botto Line 374  C-    No-slip BCs impose a drag at botto
374         ENDDO         ENDDO
375        ENDIF        ENDIF
376    
377  C--   Forcing term  C--   Forcing term (moved to timestep.F)
378        IF (momForcing)  c     IF (momForcing)
379       & CALL EXTERNAL_FORCING_V(  c    & CALL EXTERNAL_FORCING_V(
380       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
381       I     myCurrentTime,myThid)  c    I     myCurrentTime,myThid)
382    
383  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
384  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
# Line 417  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 .AND. .NOT.useCDscheme) 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        ENDIF  
463    
464        IF (        IF (
465       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,
466       &                     myCurrentTime-deltaTClock)       &                     myCurrentTime-deltaTClock)
467       & ) THEN       & ) THEN
        CALL WRITE_LOCAL_RL('Ph','I10',Nr,phi_hyd,bi,bj,1,myIter,myThid)  
468         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)
469         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)
470         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 500  C--   Bernoulli term Line 472  C--   Bernoulli term
472         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)
473         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)
474         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)
475         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)
476         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)
477         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)
478        ENDIF        ENDIF

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.3.6.2

  ViewVC Help
Powered by ViewVC 1.1.22