/[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 by jmc, Wed Jan 9 00:28:56 2002 UTC revision 1.4 by jmc, Thu Apr 17 13:49:41 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    
 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  
 c     include 'mom_vecinv.inc'  
 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  
   
267  C---- Zonal momentum equation starts here  C---- Zonal momentum equation starts here
268    
269  C--   Vertical flux (fVer is at upper face of "u" cell)  C--   Vertical flux (fVer is at upper face of "u" cell)
# Line 282  C     Combine fluxes Line 279  C     Combine fluxes
279         ENDDO         ENDDO
280        ENDDO        ENDDO
281    
 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  
   
282  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
283        DO j=2-Oly,sNy+Oly-1        DO j=2-Oly,sNy+Oly-1
284         DO i=2-Olx,sNx+Olx-1         DO i=2-Olx,sNx+Olx-1
# Line 301  C--   Tendency is minus divergence of th Line 288  C--   Tendency is minus divergence of th
288       &  *(       &  *(
289       &   +fVerU(i,j,kUp)*rkFac - fVerU(i,j,kDown)*rkFac       &   +fVerU(i,j,kUp)*rkFac - fVerU(i,j,kDown)*rkFac
290       &   )       &   )
291       & _PHM( +phxFac * pf(i,j) )       &  - phxFac*dPhiHydX(i,j)
292         ENDDO         ENDDO
293        ENDDO        ENDDO
294    
# Line 325  C-    No-slip BCs impose a drag at botto Line 312  C-    No-slip BCs impose a drag at botto
312         ENDDO         ENDDO
313        ENDIF        ENDIF
314    
315  C--   Forcing term  C--   Forcing term (moved to timestep.F)
316        IF (momForcing)  c     IF (momForcing)
317       &  CALL EXTERNAL_FORCING_U(  c    &  CALL EXTERNAL_FORCING_U(
318       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
319       I     myCurrentTime,myThid)  c    I     myCurrentTime,myThid)
320    
321  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
322  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
# Line 342  c       ENDDO Line 329  c       ENDDO
329  c      ENDDO  c      ENDDO
330  c     ENDIF  c     ENDIF
331    
 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  
   
332    
333  C---- Meridional momentum equation starts here  C---- Meridional momentum equation starts here
334    
# Line 365  C     Combine fluxes -> fVerV Line 345  C     Combine fluxes -> fVerV
345         ENDDO         ENDDO
346        ENDDO        ENDDO
347    
 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  
   
348  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
349        DO j=jMin,jMax        DO j=jMin,jMax
350         DO i=iMin,iMax         DO i=iMin,iMax
# Line 384  C--   Tendency is minus divergence of th Line 354  C--   Tendency is minus divergence of th
354       &  *(       &  *(
355       &   +fVerV(i,j,kUp)*rkFac - fVerV(i,j,kDown)*rkFac       &   +fVerV(i,j,kUp)*rkFac - fVerV(i,j,kDown)*rkFac
356       &   )       &   )
357       & _PHM( +phyFac*pf(i,j) )       &  - phyFac*dPhiHydY(i,j)
358         ENDDO         ENDDO
359        ENDDO        ENDDO
360    
# Line 408  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    
381  C--   Forcing term  C--   Forcing term (moved to timestep.F)
382        IF (momForcing)  c     IF (momForcing)
383       & CALL EXTERNAL_FORCING_V(  c    & CALL EXTERNAL_FORCING_V(
384       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
385       I     myCurrentTime,myThid)  c    I     myCurrentTime,myThid)
386    
387  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
388  c     IF (usingSphericalPolarMTerms) THEN  c     IF (usingSphericalPolarMTerms) THEN
# Line 425  c       ENDDO Line 395  c       ENDDO
395  c      ENDDO  c      ENDDO
396  c     ENDIF  c     ENDIF
397    
 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  
   
398  C--   Horizontal Coriolis terms  C--   Horizontal Coriolis terms
399        CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid)        IF (useCoriolis .AND. .NOT.useCDscheme) THEN
400  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,
401        CALL MOM_VI_CORIOLIS(bi,bj,k,uFld,vFld,omega3,hFacZ,r_hFacZ,       &                      uCf,vCf,myThid)
402       &                     uCf,vCf,myThid)         DO j=jMin,jMax
403        DO j=jMin,jMax          DO i=iMin,iMax
404         DO i=iMin,iMax           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
405          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)
406       &                    *_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)  
407         ENDDO         ENDDO
408        ENDDO        ENDIF
409  c     CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)  
410        CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,vort3,hFacZ,r_hFacZ,        IF (momAdvection) THEN
411       &                       uCf,myThid)         CALL MOM_VI_MASK_VORT3(bi,bj,k,hFacZ,r_hFacZ,vort3,myThid)
412  c     CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)  C--   Horizontal advection of relative vorticity
413        DO j=jMin,jMax  c      CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,omega3,r_hFacZ,uCf,myThid)
414         DO i=iMin,iMax         CALL MOM_VI_U_CORIOLIS(bi,bj,K,vFld,vort3,hFacZ,r_hFacZ,
415          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))       &                        uCf,myThid)
416       &                    *_maskW(i,j,k,bi,bj)  c      CALL MOM_VI_U_CORIOLIS_C4(bi,bj,K,vFld,vort3,r_hFacZ,uCf,myThid)
417           DO j=jMin,jMax
418            DO i=iMin,iMax
419             gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
420            ENDDO
421         ENDDO         ENDDO
422        ENDDO  c      CALL MOM_VI_V_CORIOLIS(bi,bj,K,uFld,omega3,r_hFacZ,vCf,myThid)
423  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,  
424       &                       vCf,myThid)       &                       vCf,myThid)
425  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)
426        DO j=jMin,jMax         DO j=jMin,jMax
427         DO i=iMin,iMax          DO i=iMin,iMax
428          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)
429       &                    *_maskS(i,j,k,bi,bj)          ENDDO
430         ENDDO         ENDDO
       ENDDO  
431    
432        IF (momAdvection) THEN  C--   Vertical shear terms (-w*du/dr & -w*dv/dr)
433  C--   Vertical shear terms (Coriolis)         CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)
434        CALL MOM_VI_U_VERTSHEAR(bi,bj,K,uVel,wVel,uCf,myThid)         DO j=jMin,jMax
435        DO j=jMin,jMax          DO i=iMin,iMax
436         DO i=iMin,iMax           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+uCf(i,j)
437          gU(i,j,k,bi,bj) = (gU(i,j,k,bi,bj)+uCf(i,j))          ENDDO
      &                    *_maskW(i,j,k,bi,bj)  
438         ENDDO         ENDDO
439        ENDDO         CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)
440        CALL MOM_VI_V_VERTSHEAR(bi,bj,K,vVel,wVel,vCf,myThid)         DO j=jMin,jMax
441        DO j=jMin,jMax          DO i=iMin,iMax
442         DO i=iMin,iMax           gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
443          gV(i,j,k,bi,bj) = (gV(i,j,k,bi,bj)+vCf(i,j))          ENDDO
      &                    *_maskS(i,j,k,bi,bj)  
444         ENDDO         ENDDO
       ENDDO  
445    
446  C--   Bernoulli term  C--   Bernoulli term
447        CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)         CALL MOM_VI_U_GRAD_KE(bi,bj,K,KE,uCf,myThid)
448        DO j=jMin,jMax         DO j=jMin,jMax
449         DO i=iMin,iMax          DO i=iMin,iMax
450          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)
451       &                    *_maskW(i,j,k,bi,bj)          ENDDO
452         ENDDO         ENDDO
453        ENDDO         CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)
454        CALL MOM_VI_V_GRAD_KE(bi,bj,K,KE,vCf,myThid)         DO j=jMin,jMax
455            DO i=iMin,iMax
456             gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+vCf(i,j)
457            ENDDO
458           ENDDO
459    C--   end if momAdvection
460          ENDIF
461    
462    C--   Set du/dt & dv/dt on boundaries to zero
463        DO j=jMin,jMax        DO j=jMin,jMax
464         DO i=iMin,iMax         DO i=iMin,iMax
465          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)
466       &                    *_maskS(i,j,k,bi,bj)          gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)*_maskS(i,j,k,bi,bj)
467         ENDDO         ENDDO
468        ENDDO        ENDDO
469        ENDIF  
470    
471        IF (        IF (
472       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,       &  DIFFERENT_MULTIPLE(diagFreq,myCurrentTime,
473       &                     myCurrentTime-deltaTClock)       &                     myCurrentTime-deltaTClock)
474       & ) THEN       & ) THEN
        CALL WRITE_LOCAL_RL('Ph','I10',Nr,phi_hyd,bi,bj,1,myIter,myThid)  
475         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)
476         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)
477         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 479  C--   Bernoulli term
479         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)
480         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)
481         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)
482         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)
483         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)
484         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)
485        ENDIF        ENDIF

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

  ViewVC Help
Powered by ViewVC 1.1.22