/[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.10 by jmc, Tue Feb 11 04:06:15 2003 UTC revision 1.21 by jmc, Fri Oct 29 16:25:37 2004 UTC
# Line 25  C where ${\bf v}=(u,v,w)$ and $\tau$, th Line 25  C where ${\bf v}=(u,v,w)$ and $\tau$, th
25  C stresses as well as internal viscous stresses.  C stresses as well as internal viscous stresses.
26  CEOI  CEOI
27    
28  #include "CPP_OPTIONS.h"  #include "MOM_FLUXFORM_OPTIONS.h"
29    
30  CBOP  CBOP
31  C !ROUTINE: MOM_FLUXFORM  C !ROUTINE: MOM_FLUXFORM
# Line 33  C !ROUTINE: MOM_FLUXFORM Line 33  C !ROUTINE: MOM_FLUXFORM
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,iMin,iMax,jMin,jMax,k,kUp,kDown,
36       I        phi_hyd,dPhihydX,dPhiHydY,KappaRU,KappaRV,       I        dPhihydX,dPhiHydY,KappaRU,KappaRV,
37       U        fVerU, fVerV,       U        fVerU, fVerV,
38       I        myTime,myIter,myThid)       I        myTime,myIter,myThid)
39    
# Line 58  C  iMin,iMax,jMin,jMAx  :: loop ranges Line 58  C  iMin,iMax,jMin,jMAx  :: loop ranges
58  C  k                    :: vertical level  C  k                    :: vertical level
59  C  kUp                  :: =1 or 2 for consecutive k  C  kUp                  :: =1 or 2 for consecutive k
60  C  kDown                :: =2 or 1 for consecutive k  C  kDown                :: =2 or 1 for consecutive k
 C  phi_hyd              :: hydrostatic pressure (perturbation)  
61  C  dPhiHydX,Y           :: Gradient (X & Y dir.) of Hydrostatic Potential  C  dPhiHydX,Y           :: Gradient (X & Y dir.) of Hydrostatic Potential
62  C  KappaRU              :: vertical viscosity  C  KappaRU              :: vertical viscosity
63  C  KappaRV              :: vertical viscosity  C  KappaRV              :: vertical viscosity
# Line 69  C  myIter               :: current time- Line 68  C  myIter               :: current time-
68  C  myThid               :: thread number  C  myThid               :: thread number
69        INTEGER bi,bj,iMin,iMax,jMin,jMax        INTEGER bi,bj,iMin,iMax,jMin,jMax
70        INTEGER k,kUp,kDown        INTEGER k,kUp,kDown
       _RL phi_hyd(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)  
71        _RL dPhiHydX(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL dPhiHydX(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
72        _RL dPhiHydY(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL dPhiHydY(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
73        _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL KappaRU(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 124  C     uDudxFac, AhDudxFac, etc ... indiv Line 122  C     uDudxFac, AhDudxFac, etc ... indiv
122        _RL  vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL  vFld(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
123        _RL  rTransU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL  rTransU(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
124        _RL  rTransV(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL  rTransV(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
125          _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
126    c     _RL viscAh_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
127    c     _RL viscAh_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
128    c     _RL viscA4_D(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
129    c     _RL viscA4_Z(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
130    c     _RL vort3(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
131    c     _RL hDiv(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
132          _RL strain(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
133          _RL tension(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
134  C     I,J,K - Loop counters  C     I,J,K - Loop counters
135  C     rVelMaskOverride - Factor for imposing special surface boundary conditions  C     rVelMaskOverride - Factor for imposing special surface boundary conditions
136  C                        ( set according to free-surface condition ).  C                        ( set according to free-surface condition ).
# Line 157  C     xxxFac - On-off tracer parameters Line 164  C     xxxFac - On-off tracer parameters
164        INTEGER km1,kp1        INTEGER km1,kp1
165        _RL wVelBottomOverride        _RL wVelBottomOverride
166        LOGICAL bottomDragTerms        LOGICAL bottomDragTerms
       _RL KE(1-OLx:sNx+OLx,1-OLy:sNy+OLy)  
167  CEOP  CEOP
168    
169        km1=MAX(1,k-1)        km1=MAX(1,k-1)
# Line 181  C     Initialise intermediate terms Line 187  C     Initialise intermediate terms
187          fMer(i,j) = 0.          fMer(i,j) = 0.
188          rTransU(i,j) = 0.          rTransU(i,j) = 0.
189          rTransV(i,j) = 0.          rTransV(i,j) = 0.
190            strain(i,j) = 0.
191            tension(i,j) = 0.
192         ENDDO         ENDDO
193        ENDDO        ENDDO
194    
# Line 255  C     Calculate velocity field "volume t Line 263  C     Calculate velocity field "volume t
263         ENDDO         ENDDO
264        ENDDO        ENDDO
265    
266        CALL MOM_CALC_KE(bi,bj,k,uFld,vFld,KE,myThid)        CALL MOM_CALC_KE(bi,bj,k,3,uFld,vFld,KE,myThid)
267    
268          IF (viscAstrain.NE.0. .OR. viscAtension.NE.0.) THEN
269             CALL MOM_CALC_TENSION(bi,bj,k,uFld,vFld,
270         O                         tension,
271         I                         myThid)
272             CALL MOM_CALC_STRAIN(bi,bj,k,uFld,vFld,hFacZ,
273         O                        strain,
274         I                        myThid)
275          ENDIF
276    
277  C---  First call (k=1): compute vertical adv. flux fVerU(kUp) & fVerV(kUp)  C---  First call (k=1): compute vertical adv. flux fVerU(kUp) & fVerV(kUp)
278        IF (momAdvection.AND.k.EQ.1) THEN        IF (momAdvection.AND.k.EQ.1) THEN
# Line 291  C---  Calculate vertical transports (at Line 308  C---  Calculate vertical transports (at
308       I                       myTime, myIter, myThid)       I                       myTime, myIter, myThid)
309        ENDIF        ENDIF
310    
311    c     IF (momViscosity) THEN
312    c    &  CALL MOM_CALC_VISCOSITY(bi,bj,k,
313    c    I                         uFld,vFld,
314    c    O                         viscAh_D,viscAh_Z,myThid)
315    
316  C---- Zonal momentum equation starts here  C---- Zonal momentum equation starts here
317    
# Line 411  C-    No-slip BCs impose a drag at botto Line 432  C-    No-slip BCs impose a drag at botto
432         ENDDO         ENDDO
433        ENDIF        ENDIF
434    
435  C--   Forcing term  C--   Forcing term (moved to timestep.F)
436        IF (momForcing)  c     IF (momForcing)
437       &  CALL EXTERNAL_FORCING_U(  c    &  CALL EXTERNAL_FORCING_U(
438       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
439       I     myTime,myThid)  c    I     myTime,myThid)
440    
441  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
442        IF (useNHMTerms) THEN        IF (useNHMTerms) THEN
# Line 434  C      o Non-hydrosatic metric terms Line 455  C      o Non-hydrosatic metric terms
455           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mTFacU*mT(i,j)           gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mTFacU*mT(i,j)
456          ENDDO          ENDDO
457         ENDDO         ENDDO
458                                                                                    
459          ENDIF
460          IF (usingCylindricalGrid) THEN
461             CALL MOM_U_METRIC_CYLINDER(bi,bj,k,uFld,vFld,mT,myThid)
462             DO j=jMin,jMax
463              DO i=iMin,iMax
464                 gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+mTFacU*mT(i,j)
465              ENDDO
466           ENDDO
467                                                                                    
468        ENDIF        ENDIF
   
469  C--   Set du/dt on boundaries to zero  C--   Set du/dt on boundaries to zero
470        DO j=jMin,jMax        DO j=jMin,jMax
471         DO i=iMin,iMax         DO i=iMin,iMax
# Line 563  C-    No-slip BCs impose a drag at botto Line 593  C-    No-slip BCs impose a drag at botto
593         ENDDO         ENDDO
594        ENDIF        ENDIF
595    
596  C--   Forcing term  C--   Forcing term (moved to timestep.F)
597        IF (momForcing)  c     IF (momForcing)
598       & CALL EXTERNAL_FORCING_V(  c    & CALL EXTERNAL_FORCING_V(
599       I     iMin,iMax,jMin,jMax,bi,bj,k,  c    I     iMin,iMax,jMin,jMax,bi,bj,k,
600       I     myTime,myThid)  c    I     myTime,myThid)
601    
602  C--   Metric terms for curvilinear grid systems  C--   Metric terms for curvilinear grid systems
603        IF (useNHMTerms) THEN        IF (useNHMTerms) THEN
# Line 587  C      o Spherical polar grid metric ter Line 617  C      o Spherical polar grid metric ter
617          ENDDO          ENDDO
618         ENDDO         ENDDO
619        ENDIF        ENDIF
620          IF (usingCylindricalGrid) THEN
621             CALL MOM_V_METRIC_CYLINDER(bi,bj,k,uFld,vFld,mT,myThid)
622             DO j=jMin,jMax
623                DO i=iMin,iMax
624                   gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+mTFacV*mT(i,j)
625                ENDDO
626             ENDDO
627          ENDIF
628    
629  C--   Set dv/dt on boundaries to zero  C--   Set dv/dt on boundaries to zero
630        DO j=jMin,jMax        DO j=jMin,jMax
# Line 597  C--   Set dv/dt on boundaries to zero Line 635  C--   Set dv/dt on boundaries to zero
635    
636  C--   Coriolis term  C--   Coriolis term
637  C     Note. As coded here, coriolis will not work with "thin walls"  C     Note. As coded here, coriolis will not work with "thin walls"
638  #ifdef INCLUDE_CD_CODE  c     IF (useCDscheme) THEN
639        CALL MOM_CDSCHEME(bi,bj,k,phi_hyd,dPhiHydX,dPhiHydY,myThid)  c       CALL MOM_CDSCHEME(bi,bj,k,dPhiHydX,dPhiHydY,myThid)
640  #else  c     ELSE
641        CALL MOM_U_CORIOLIS(bi,bj,k,vFld,cf,myThid)        IF (.NOT.useCDscheme) THEN
642        DO j=jMin,jMax          CALL MOM_U_CORIOLIS(bi,bj,k,vFld,cf,myThid)
643         DO i=iMin,iMax          DO j=jMin,jMax
644          gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)           DO i=iMin,iMax
645         ENDDO            gU(i,j,k,bi,bj) = gU(i,j,k,bi,bj)+fuFac*cf(i,j)
646        ENDDO           ENDDO
647        CALL MOM_V_CORIOLIS(bi,bj,k,uFld,cf,myThid)          ENDDO
648        DO j=jMin,jMax          CALL MOM_V_CORIOLIS(bi,bj,k,uFld,cf,myThid)
649         DO i=iMin,iMax          DO j=jMin,jMax
650          gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)           DO i=iMin,iMax
651         ENDDO            gV(i,j,k,bi,bj) = gV(i,j,k,bi,bj)+fvFac*cf(i,j)
652        ENDDO           ENDDO
653  #endif /* INCLUDE_CD_CODE */          ENDDO
654          ENDIF
655    
656        IF (nonHydrostatic.OR.quasiHydrostatic) THEN        IF (nonHydrostatic.OR.quasiHydrostatic) THEN
657         CALL MOM_U_CORIOLIS_NH(bi,bj,k,wVel,cf,myThid)         CALL MOM_U_CORIOLIS_NH(bi,bj,k,wVel,cf,myThid)
658         DO j=jMin,jMax         DO j=jMin,jMax

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.21

  ViewVC Help
Powered by ViewVC 1.1.22