54 |
C i,j :: loop indices |
C i,j :: loop indices |
55 |
C Cr :: slope ratio |
C Cr :: slope ratio |
56 |
C Rjm,Rj,Rjp :: differences at i-1,i,i+1 |
C Rjm,Rj,Rjp :: differences at i-1,i,i+1 |
57 |
|
C uFld :: velocity [m/s], zonal component |
58 |
INTEGER i,j |
INTEGER i,j |
59 |
_RL Cr,Rjm,Rj,Rjp |
_RL Cr,Rjm,Rj,Rjp |
60 |
|
_RL uFld |
61 |
C Statement function provides Limiter(Cr) |
C Statement function provides Limiter(Cr) |
62 |
#include "GAD_FLUX_LIMITER.h" |
#include "GAD_FLUX_LIMITER.h" |
63 |
CEOP |
CEOP |
67 |
uT(2-Olx,j)=0. |
uT(2-Olx,j)=0. |
68 |
uT(sNx+Olx,j)=0. |
uT(sNx+Olx,j)=0. |
69 |
DO i=1-Olx+2,sNx+Olx-1 |
DO i=1-Olx+2,sNx+Olx-1 |
70 |
|
|
71 |
|
c uFld = uVel(i,j,k,bi,bj) |
72 |
|
uFld = uTrans(i,j)*recip_dyG(i,j,bi,bj) |
73 |
|
& *recip_drF(k)*recip_hFacW(i,j,k,bi,bj) |
74 |
Rjp=(tracer(i+1,j)-tracer(i,j))*maskW(i+1,j,k,bi,bj) |
Rjp=(tracer(i+1,j)-tracer(i,j))*maskW(i+1,j,k,bi,bj) |
75 |
Rj=(tracer(i,j)-tracer(i-1,j))*maskW(i,j,k,bi,bj) |
Rj=(tracer(i,j)-tracer(i-1,j))*maskW(i,j,k,bi,bj) |
76 |
Rjm=(tracer(i-1,j)-tracer(i-2,j))*maskW(i-1,j,k,bi,bj) |
Rjm=(tracer(i-1,j)-tracer(i-2,j))*maskW(i-1,j,k,bi,bj) |
77 |
|
|
78 |
IF (Rj.NE.0.) THEN |
IF (Rj.NE.0.) THEN |
79 |
IF (uTrans(i,j).GT.0) THEN |
IF (uTrans(i,j).GT.0) THEN |
80 |
Cr=Rjm/Rj |
Cr=Rjm/Rj |
93 |
& uTrans(i,j)*(Tracer(i,j)+Tracer(i-1,j))*0.5 _d 0 |
& uTrans(i,j)*(Tracer(i,j)+Tracer(i-1,j))*0.5 _d 0 |
94 |
& -0.5*( |
& -0.5*( |
95 |
& (1-Cr)*ABS(uTrans(i,j)) |
& (1-Cr)*ABS(uTrans(i,j)) |
96 |
& +uTrans(i,j)*uVel(i,j,k,bi,bj)*deltaT |
& +uTrans(i,j)*uFld*deltaT |
97 |
& *recip_dxC(i,j,bi,bj)*Cr |
& *recip_dxC(i,j,bi,bj)*Cr |
98 |
& )*Rj |
& )*Rj |
99 |
ENDDO |
ENDDO |