/[MITgcm]/MITgcm/pkg/generic_advdiff/gad_dst3_adv_r.F
ViewVC logotype

Diff of /MITgcm/pkg/generic_advdiff/gad_dst3_adv_r.F

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

revision 1.6 by jmc, Sat Oct 22 20:12:23 2005 UTC revision 1.9 by jmc, Sun Oct 22 01:08:04 2006 UTC
# Line 7  CBOP Line 7  CBOP
7  C !ROUTINE: GAD_DST3_ADV_R  C !ROUTINE: GAD_DST3_ADV_R
8    
9  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
10        SUBROUTINE GAD_DST3_ADV_R(        SUBROUTINE GAD_DST3_ADV_R(
11       I           bi,bj,k,dTarg,       I           bi,bj,k,dTarg,
12       I           rTrans, wVel,       I           rTrans, wFld,
13       I           tracer,       I           tracer,
14       O           wT,       O           wT,
15       I           myThid )       I           myThid )
# Line 34  C  bi,bj             :: tile indices Line 34  C  bi,bj             :: tile indices
34  C  k                 :: vertical level  C  k                 :: vertical level
35  C  deltaTloc         :: local time-step (s)  C  deltaTloc         :: local time-step (s)
36  C  rTrans            :: vertical volume transport  C  rTrans            :: vertical volume transport
37  C  wVel              :: vertical flow  C  wFld              :: vertical flow
38  C  tracer            :: tracer field  C  tracer            :: tracer field
39  C  myThid            :: thread number  C  myThid            :: thread number
40        INTEGER bi,bj,k        INTEGER bi,bj,k
41        _RL dTarg        _RL dTarg
42        _RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
43        _RL wVel(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)        _RL wFld  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
44        _RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
45        INTEGER myThid        INTEGER myThid
46    
# Line 52  C     == Local variables == Line 52  C     == Local variables ==
52  C !LOCAL VARIABLES: ====================================================  C !LOCAL VARIABLES: ====================================================
53  C  i,j               :: loop indices  C  i,j               :: loop indices
54  C  km1               :: =max( k-1 , 1 )  C  km1               :: =max( k-1 , 1 )
55  C  rLimit            :: centered (vs upwind) fraction  C  wLoc              :: velocity, vertical component
 C  wFld              :: velocity, vertical component  
56  C  wCFL              :: Courant-Friedrich-Levy number  C  wCFL              :: Courant-Friedrich-Levy number
57        INTEGER i,j,kp1,km1,km2        INTEGER i,j,kp1,km1,km2
58          _RL wLoc
59        _RL Rjm,Rj,Rjp,cfl,d0,d1        _RL Rjm,Rj,Rjp,cfl,d0,d1
60    #ifdef OLD_DST3_FORMULATION
61        _RL psiP,psiM,thetaP,thetaM        _RL psiP,psiM,thetaP,thetaM
       _RL wFld  
62        _RL smallNo        _RL smallNo
63    
64        IF (inAdMode) THEN        IF (inAdMode) THEN
# Line 66  C  wCFL              :: Courant-Friedric Line 66  C  wCFL              :: Courant-Friedric
66        ELSE        ELSE
67         smallNo = 1.0D-20         smallNo = 1.0D-20
68        ENDIF        ENDIF
69    #endif
70    
71        km2=MAX(1,k-2)        km2=MAX(1,k-2)
72        km1=MAX(1,k-1)        km1=MAX(1,k-1)
# Line 80  C  wCFL              :: Courant-Friedric Line 81  C  wCFL              :: Courant-Friedric
81          Rjm=(tracer(i,j,km2)-tracer(i,j,km1))          Rjm=(tracer(i,j,km2)-tracer(i,j,km1))
82       &         *maskC(i,j,km1,bi,bj)       &         *maskC(i,j,km1,bi,bj)
83    
84  c       wFld = wVel(i,j,k,bi,bj)          wLoc = wFld(i,j)
85          wFld = rTrans(i,j)*recip_rA(i,j,bi,bj)  c       wLoc = rTrans(i,j)*recip_rA(i,j,bi,bj)
86          cfl=abs(wFld*dTarg*recip_drC(k))          cfl=ABS(wLoc*dTarg*recip_drC(k))
87          d0=(2.-cfl)*(1.-cfl)*oneSixth          d0=(2.-cfl)*(1.-cfl)*oneSixth
88          d1=(1.-cfl*cfl)*oneSixth          d1=(1.-cfl*cfl)*oneSixth
89  #ifdef ALLOW_MATRIX  #ifdef OLD_DST3_FORMULATION
         IF (.NOT.useMATRIX) THEN  
 #endif /* ALLOW_MATRIX */          
90          IF ( ABS(Rj).LT.smallNo .OR.          IF ( ABS(Rj).LT.smallNo .OR.
91       &       ABS(Rjm).LT.smallNo ) THEN       &       ABS(Rjm).LT.smallNo ) THEN
92           thetaP=0.           thetaP=0.
# Line 105  c       wFld = wVel(i,j,k,bi,bj) Line 104  c       wFld = wVel(i,j,k,bi,bj)
104           psiM=d0+d1*thetaM           psiM=d0+d1*thetaM
105          ENDIF          ENDIF
106           wT(i,j)=           wT(i,j)=
107       &    0.5*(rTrans(i,j)+abs(rTrans(i,j)))       &    0.5*(rTrans(i,j)+ABS(rTrans(i,j)))
108       &       *( tracer(i,j, k ) + psiM*Rj )       &       *( tracer(i,j, k ) + psiM*Rj )
109       &   +0.5*(rTrans(i,j)-abs(rTrans(i,j)))       &   +0.5*(rTrans(i,j)-ABS(rTrans(i,j)))
110       &       *( tracer(i,j,km1) - psiP*Rj )       &       *( tracer(i,j,km1) - psiP*Rj )
111  #ifdef ALLOW_MATRIX  #else /* OLD_DST3_FORMULATION */
112          ELSE          wT(i,j)=
113            wT(i,j)=       &    0.5*(rTrans(i,j)+ABS(rTrans(i,j)))
114       &     0.5*(rTrans(i,j)+abs(rTrans(i,j)))       &       *( tracer(i,j, k ) + (d0*Rj+d1*Rjp) )
115       &        *( tracer(i,j, k ) + (d0*Rj+d1*Rjp) )       &   +0.5*(rTrans(i,j)-ABS(rTrans(i,j)))
116       &    +0.5*(rTrans(i,j)-abs(rTrans(i,j)))       &       *( tracer(i,j,km1) - (d0*Rj+d1*Rjm) )
117       &        *( tracer(i,j,km1) - (d0*Rj+d1*Rjm) )  #endif /* OLD_DST3_FORMULATION */
         ENDIF  
 #endif /* ALLOW_MATRIX */  
118    
119         ENDDO         ENDDO
120        ENDDO        ENDDO

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.22