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

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

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

revision 1.8 by edhill, Mon Mar 29 03:33:51 2004 UTC revision 1.9 by jmc, Sat Oct 22 20:12:23 2005 UTC
# Line 8  C !ROUTINE: GAD_FLUXLIMIT_ADV_R Line 8  C !ROUTINE: GAD_FLUXLIMIT_ADV_R
8    
9  C !INTERFACE: ==========================================================  C !INTERFACE: ==========================================================
10        SUBROUTINE GAD_FLUXLIMIT_ADV_R(        SUBROUTINE GAD_FLUXLIMIT_ADV_R(
11       I           bi_arg,bj_arg,k,dTarg,       I           bi,bj,k,dTarg,
12       I           rTrans, wVel,       I           rTrans, wVel,
13       I           tracer,       I           tracer,
14       O           wT,       O           wT,
# Line 35  C !USES: =============================== Line 35  C !USES: ===============================
35  #include "PARAMS.h"  #include "PARAMS.h"
36    
37  C !INPUT PARAMETERS: ===================================================  C !INPUT PARAMETERS: ===================================================
38  C  bi_arg,bj_arg      :: tile indices  C  bi,bj              :: tile indices
39  C  k                  :: vertical level  C  k                  :: vertical level
40  C  rTrans             :: vertical volume transport  C  rTrans             :: vertical volume transport
41  C  wVel               :: vertical flow  C  wVel               :: vertical flow
42  C  tracer             :: tracer field  C  tracer             :: tracer field
43  C  myThid             :: thread number  C  myThid             :: thread number
44        INTEGER bi_arg,bj_arg,k        INTEGER bi,bj,k
45        _RL dTarg        _RL dTarg
46        _RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
47        _RL wVel  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)        _RL wVel  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
48        _RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)        _RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
49        INTEGER myThid        INTEGER myThid
50    
51  C !OUTPUT PARAMETERS: ==================================================  C !OUTPUT PARAMETERS: ==================================================
# Line 61  C  bi,bj              :: tile indices or Line 61  C  bi,bj              :: tile indices or
61  C  Cr                 :: slope ratio  C  Cr                 :: slope ratio
62  C  Rjm,Rj,Rjp         :: differences at i-1,i,i+1  C  Rjm,Rj,Rjp         :: differences at i-1,i,i+1
63  C  wFld               :: velocity, vertical component  C  wFld               :: velocity, vertical component
64        INTEGER i,j,kp1,km1,km2,bi,bj        INTEGER i,j,kp1,km1,km2
65        _RL Cr,Rjm,Rj,Rjp        _RL Cr,Rjm,Rj,Rjp
66        _RL wFld        _RL wFld
67  C Statement function provides Limiter(Cr)  C Statement function provides Limiter(Cr)
68  #include "GAD_FLUX_LIMITER.h"  #include "GAD_FLUX_LIMITER.h"
69  CEOP  CEOP
70    
       IF (.NOT. multiDimAdvection) THEN  
 C      If using the standard time-stepping/advection schemes (ie. AB-II)  
 C      then the data-structures are all global arrays  
        bi=bi_arg  
        bj=bj_arg  
       ELSE  
 C      otherwise if using the multi-dimensional advection schemes  
 C      then the data-structures are all local arrays except  
 C      for maskC(...) and wVel(...)  
        bi=1  
        bj=1  
       ENDIF  
   
71        km2=MAX(1,k-2)        km2=MAX(1,k-2)
72        km1=MAX(1,k-1)        km1=MAX(1,k-1)
73        kp1=MIN(Nr,k+1)        kp1=MIN(Nr,k+1)
# Line 95  C      for maskC(...) and wVel(...) Line 82  C      for maskC(...) and wVel(...)
82         DO j=1-Oly,sNy+Oly         DO j=1-Oly,sNy+Oly
83          DO i=1-Olx,sNx+Olx          DO i=1-Olx,sNx+Olx
84    
85  c        wFld = wVel(i,j,k,bi_arg,bj_arg)  c        wFld = wVel(i,j,k,bi,bj)
86           wFld = rTrans(i,j)*recip_rA(i,j,bi_arg,bj_arg)           wFld = rTrans(i,j)*recip_rA(i,j,bi,bj)
87           Rjp=(tracer(i,j,kp1,bi,bj)-tracer(i,j,k,bi,bj))           Rjp=(tracer(i,j,kp1)-tracer(i,j,k))
88       &        *maskC(i,j,kp1,bi_arg,bj_arg)       &        *maskC(i,j,kp1,bi,bj)
89           Rj=(tracer(i,j,k,bi,bj)-tracer(i,j,kM1,bi,bj))           Rj= (tracer(i,j,k)  -tracer(i,j,kM1))
90           Rjm=(tracer(i,j,km1,bi,bj)-tracer(i,j,kM2,bi,bj))           Rjm=(tracer(i,j,km1)-tracer(i,j,kM2))
91       &        *maskC(i,j,km2,bi_arg,bj_arg)       &        *maskC(i,j,km2,bi,bj)
92    
93           IF (Rj.NE.0.) THEN           IF (Rj.NE.0.) THEN
94            IF (rTrans(i,j).LT.0.) THEN            IF (rTrans(i,j).LT.0.) THEN
# Line 117  c        wFld = wVel(i,j,k,bi_arg,bj_arg Line 104  c        wFld = wVel(i,j,k,bi_arg,bj_arg
104            ENDIF            ENDIF
105           ENDIF           ENDIF
106           Cr=Limiter(Cr)           Cr=Limiter(Cr)
107           wT(i,j) = maskC(i,j,kM1,bi_arg,bj_arg)*(           wT(i,j) = maskC(i,j,kM1,bi,bj)*(
108       &     rTrans(i,j)*       &     rTrans(i,j)*
109       &        (Tracer(i,j,k,bi,bj)+Tracer(i,j,kM1,bi,bj))*0.5 _d 0       &        (tracer(i,j,k)+tracer(i,j,kM1))*0.5 _d 0
110       &    +(ABS(rTrans(i,j))*(1-Cr)       &    +(ABS(rTrans(i,j))*(1-Cr)
111       &      +rTrans(i,j)*wFld*dTarg*recip_drC(k)       &      +rTrans(i,j)*wFld*dTarg*recip_drC(k)
112       &                  *Cr       &                  *Cr

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

  ViewVC Help
Powered by ViewVC 1.1.22