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

Diff of /MITgcm/pkg/mom_fluxform/mom_fluxform.F

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

revision 1.43 by jmc, Fri Mar 16 21:35:09 2012 UTC revision 1.44 by jmc, Sun Mar 18 22:21:31 2012 UTC
# Line 32  C !ROUTINE: MOM_FLUXFORM Line 32  C !ROUTINE: MOM_FLUXFORM
32    
33  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
34        SUBROUTINE MOM_FLUXFORM(        SUBROUTINE MOM_FLUXFORM(
35       I        bi,bj,iMin,iMax,jMin,jMax,k,kUp,kDown,       I        bi,bj,k,iMin,iMax,jMin,jMax,
36       I        KappaRU, KappaRV,       I        KappaRU, KappaRV,
37       U        fVerU, fVerV,       U        fVerUkm, fVerVkm,
38         O        fVerUkp, fVerVkp,
39       O        guDiss, gvDiss,       O        guDiss, gvDiss,
40       I        myTime, myIter, myThid)       I        myTime, myIter, myThid )
41    
42  C !DESCRIPTION:  C !DESCRIPTION:
43  C Calculates all the horizontal accelerations except for the implicit surface  C Calculates all the horizontal accelerations except for the implicit surface
# Line 59  C     == Global variables == Line 60  C     == Global variables ==
60  #endif  #endif
61    
62  C !INPUT PARAMETERS: ===================================================  C !INPUT PARAMETERS: ===================================================
63  C  bi,bj                :: tile indices  C  bi,bj                :: current tile indices
64  C  iMin,iMax,jMin,jMAx  :: loop ranges  C  k                    :: current vertical level
65  C  k                    :: vertical level  C  iMin,iMax,jMin,jMax  :: loop ranges
 C  kUp                  :: =1 or 2 for consecutive k  
 C  kDown                :: =2 or 1 for consecutive k  
66  C  KappaRU              :: vertical viscosity  C  KappaRU              :: vertical viscosity
67  C  KappaRV              :: vertical viscosity  C  KappaRV              :: vertical viscosity
68  C  fVerU                :: vertical flux of U, 2 1/2 dim for pipe-lining  C  fVerUkm              :: vertical advective flux of U, interface above (k-1/2)
69  C  fVerV                :: vertical flux of V, 2 1/2 dim for pipe-lining  C  fVerVkm              :: vertical advective flux of V, interface above (k-1/2)
70    C  fVerUkp              :: vertical advective flux of U, interface below (k+1/2)
71    C  fVerVkp              :: vertical advective flux of V, interface below (k+1/2)
72  C  guDiss               :: dissipation tendency (all explicit terms), u component  C  guDiss               :: dissipation tendency (all explicit terms), u component
73  C  gvDiss               :: dissipation tendency (all explicit terms), v component  C  gvDiss               :: dissipation tendency (all explicit terms), v component
74  C  myTime               :: current time  C  myTime               :: current time
75  C  myIter               :: current time-step number  C  myIter               :: current time-step number
76  C  myThid               :: thread number  C  myThid               :: my Thread Id number
77        INTEGER bi,bj,iMin,iMax,jMin,jMax        INTEGER bi,bj,k
78        INTEGER k,kUp,kDown        INTEGER iMin,iMax,jMin,jMax
79        _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
80        _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL KappaRV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
81        _RL fVerU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerUkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
82        _RL fVerV(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerVkm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
83          _RL fVerUkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
84          _RL fVerVkp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
85        _RL guDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL guDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
86        _RL gvDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL gvDiss(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
87        _RL     myTime        _RL     myTime
# Line 96  C  cF                   :: Coriolis acce Line 99  C  cF                   :: Coriolis acce
99  C  mT                   :: Metric terms  C  mT                   :: Metric terms
100  C  fZon                 :: zonal fluxes  C  fZon                 :: zonal fluxes
101  C  fMer                 :: meridional fluxes  C  fMer                 :: meridional fluxes
102  C  fVrUp,fVrDw          :: vertical viscous fluxes at interface k-1 & k  C  fVrUp,fVrDw          :: vertical viscous fluxes at interface k & k+1
103        INTEGER i,j        INTEGER i,j
104  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
105        INTEGER imomkey        INTEGER imomkey
# Line 302  C     anelastic: transports are scaled b Line 305  C     anelastic: transports are scaled b
305  #endif  #endif
306        ENDIF        ENDIF
307    
308  C---  First call (k=1): compute vertical adv. flux fVerU(kUp) & fVerV(kUp)  C---  First call (k=1): compute vertical adv. flux fVerUkm & fVerVkm
309        IF (momAdvection.AND.k.EQ.1) THEN        IF (momAdvection.AND.k.EQ.1) THEN
310    
311  #ifdef MOM_BOUNDARY_CONSERVE  #ifdef MOM_BOUNDARY_CONSERVE
# Line 333  CADJ &     comlev1_bibj_k, key = imomkey Line 336  CADJ &     comlev1_bibj_k, key = imomkey
336    
337  C-    Free surface correction term (flux at k=1)  C-    Free surface correction term (flux at k=1)
338          CALL MOM_U_ADV_WU( bi,bj,k,uVel,wVel,rTransU,          CALL MOM_U_ADV_WU( bi,bj,k,uVel,wVel,rTransU,
339       O                     fVerU(1-OLx,1-OLy,kUp), myThid )       O                     fVerUkm, myThid )
340    
341          CALL MOM_V_ADV_WV( bi,bj,k,vVel,wVel,rTransV,          CALL MOM_V_ADV_WV( bi,bj,k,vVel,wVel,rTransV,
342       O                     fVerV(1-OLx,1-OLy,kUp), myThid )       O                     fVerVkm, myThid )
343    
344  C---  endif momAdvection & k=1  C---  endif momAdvection & k=1
345        ENDIF        ENDIF
# Line 382  C---  Calculate mean fluxes (advection) Line 385  C---  Calculate mean fluxes (advection)
385       O                     fMer,myThid )       O                     fMer,myThid )
386          CALL MOM_U_ADV_WU(          CALL MOM_U_ADV_WU(
387       I                     bi,bj,k+1,uBnd,wVel,rTransU,       I                     bi,bj,k+1,uBnd,wVel,rTransU,
388       O                     fVerU(1-OLx,1-OLy,kDown), myThid )       O                     fVerUkp, myThid )
389  #else /* MOM_BOUNDARY_CONSERVE */  #else /* MOM_BOUNDARY_CONSERVE */
390  C--   Zonal flux (fZon is at east face of "u" cell)  C--   Zonal flux (fZon is at east face of "u" cell)
391  C     Mean flow component of zonal flux -> fZon  C     Mean flow component of zonal flux -> fZon
# Line 396  C--   Vertical flux (fVer is at upper fa Line 399  C--   Vertical flux (fVer is at upper fa
399  C     Mean flow component of vertical flux (at k+1) -> fVer  C     Mean flow component of vertical flux (at k+1) -> fVer
400          CALL MOM_U_ADV_WU(          CALL MOM_U_ADV_WU(
401       I                     bi,bj,k+1,uVel,wVel,rTransU,       I                     bi,bj,k+1,uVel,wVel,rTransU,
402       O                     fVerU(1-OLx,1-OLy,kDown), myThid )       O                     fVerUkp, myThid )
403  #endif /* MOM_BOUNDARY_CONSERVE */  #endif /* MOM_BOUNDARY_CONSERVE */
404    
405  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
# Line 410  C--   Tendency is minus divergence of th Line 413  C--   Tendency is minus divergence of th
413       &     -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)       &     -_recip_hFacW(i,j,k,bi,bj)*recip_drF(k)
414       &     *recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)       &     *recip_rAw(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
415  #endif  #endif
416       &     *( ( fZon(i,j  )     - fZon(i-1,j) )*uDudxFac       &     *( ( fZon(i,j  )  - fZon(i-1,j)  )*uDudxFac
417       &       +( fMer(i,j+1)     - fMer(i,  j) )*vDudyFac       &       +( fMer(i,j+1)  - fMer(i,  j)  )*vDudyFac
418       &       +(fVerU(i,j,kDown) - fVerU(i,j,kUp))*rkSign*rVelDudrFac       &       +( fVerUkp(i,j) - fVerUkm(i,j) )*rkSign*rVelDudrFac
419       &     )       &     )
420           ENDDO           ENDDO
421          ENDDO          ENDDO
422    
423  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
424          IF ( useDiagnostics ) THEN          IF ( useDiagnostics ) THEN
425            CALL DIAGNOSTICS_FILL(fZon,'ADVx_Um ',k,1,2,bi,bj,myThid)            CALL DIAGNOSTICS_FILL( fZon,  'ADVx_Um ',k,1,2,bi,bj,myThid)
426            CALL DIAGNOSTICS_FILL(fMer,'ADVy_Um ',k,1,2,bi,bj,myThid)            CALL DIAGNOSTICS_FILL( fMer,  'ADVy_Um ',k,1,2,bi,bj,myThid)
427            CALL DIAGNOSTICS_FILL(fVerU(1-OLx,1-OLy,kUp),            CALL DIAGNOSTICS_FILL(fVerUkm,'ADVrE_Um',k,1,2,bi,bj,myThid)
      &                               'ADVrE_Um',k,1,2,bi,bj,myThid)  
428          ENDIF          ENDIF
429  #endif  #endif
430    
# Line 610  C---- Meridional momentum equation start Line 612  C---- Meridional momentum equation start
612       O                     fZon,myThid )       O                     fZon,myThid )
613          CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vBnd(1-OLx,1-OLy,k,bi,bj),          CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vBnd(1-OLx,1-OLy,k,bi,bj),
614       O                     fMer,myThid )       O                     fMer,myThid )
615          CALL MOM_V_ADV_WV(          CALL MOM_V_ADV_WV( bi,bj,k+1,vBnd,wVel,rTransV,
616       I                     bi,bj,k+1,vBnd,wVel,rTransV,       O                     fVerVkp, myThid )
      O                     fVerV(1-OLx,1-OLy,kDown), myThid )  
617  #else /* MOM_BOUNDARY_CONSERVE */  #else /* MOM_BOUNDARY_CONSERVE */
618  C---  Calculate mean fluxes (advection)   between cells for meridional flow.  C---  Calculate mean fluxes (advection)   between cells for meridional flow.
619  C     Mean flow component of zonal flux -> fZon  C     Mean flow component of zonal flux -> fZon
620          CALL MOM_V_ADV_UV(bi,bj,k,uTrans,vFld,fZon,myThid)          CALL MOM_V_ADV_UV( bi,bj,k,uTrans,vFld,fZon,myThid )
621    
622  C--   Meridional flux (fMer is at north face of "v" cell)  C--   Meridional flux (fMer is at north face of "v" cell)
623  C     Mean flow component of meridional flux -> fMer  C     Mean flow component of meridional flux -> fMer
624          CALL MOM_V_ADV_VV(bi,bj,k,vTrans,vFld,fMer,myThid)          CALL MOM_V_ADV_VV( bi,bj,k,vTrans,vFld,fMer,myThid )
625    
626  C--   Vertical flux (fVer is at upper face of "v" cell)  C--   Vertical flux (fVer is at upper face of "v" cell)
627  C     Mean flow component of vertical flux (at k+1) -> fVerV  C     Mean flow component of vertical flux (at k+1) -> fVerV
628          CALL MOM_V_ADV_WV(          CALL MOM_V_ADV_WV( bi,bj,k+1,vVel,wVel,rTransV,
629       I                     bi,bj,k+1,vVel,wVel,rTransV,       O                     fVerVkp, myThid )
      O                     fVerV(1-OLx,1-OLy,kDown), myThid )  
630  #endif /* MOM_BOUNDARY_CONSERVE */  #endif /* MOM_BOUNDARY_CONSERVE */
631    
632  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term  C--   Tendency is minus divergence of the fluxes + coriolis + pressure term
# Line 640  C--   Tendency is minus divergence of th Line 640  C--   Tendency is minus divergence of th
640       &     -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)       &     -_recip_hFacS(i,j,k,bi,bj)*recip_drF(k)
641       &     *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)       &     *recip_rAs(i,j,bi,bj)*recip_deepFac2C(k)*recip_rhoFacC(k)
642  #endif  #endif
643       &     *( ( fZon(i+1,j)     - fZon(i,j  ) )*uDvdxFac       &     *( ( fZon(i+1,j)  - fZon(i,j  )  )*uDvdxFac
644       &       +( fMer(i,  j)     - fMer(i,j-1) )*vDvdyFac       &       +( fMer(i,  j)  - fMer(i,j-1)  )*vDvdyFac
645       &       +(fVerV(i,j,kDown) - fVerV(i,j,kUp))*rkSign*rVelDvdrFac       &       +( fVerVkp(i,j) - fVerVkm(i,j) )*rkSign*rVelDvdrFac
646       &     )       &     )
647           ENDDO           ENDDO
648          ENDDO          ENDDO
649    
650  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
651          IF ( useDiagnostics ) THEN          IF ( useDiagnostics ) THEN
652            CALL DIAGNOSTICS_FILL(fZon,'ADVx_Vm ',k,1,2,bi,bj,myThid)            CALL DIAGNOSTICS_FILL( fZon,  'ADVx_Vm ',k,1,2,bi,bj,myThid)
653            CALL DIAGNOSTICS_FILL(fMer,'ADVy_Vm ',k,1,2,bi,bj,myThid)            CALL DIAGNOSTICS_FILL( fMer,  'ADVy_Vm ',k,1,2,bi,bj,myThid)
654            CALL DIAGNOSTICS_FILL(fVerV(1-OLx,1-OLy,kUp),            CALL DIAGNOSTICS_FILL(fVerVkm,'ADVrE_Vm',k,1,2,bi,bj,myThid)
      &                               'ADVrE_Vm',k,1,2,bi,bj,myThid)  
655          ENDIF          ENDIF
656  #endif  #endif
657    

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.44

  ViewVC Help
Powered by ViewVC 1.1.22