13 |
C | SUBROUTINE GAD_U3_ADV_R | |
C | SUBROUTINE GAD_U3_ADV_R | |
14 |
C | o Compute vertical advective Flux of Tracer using | |
C | o Compute vertical advective Flux of Tracer using | |
15 |
C | 3rd Order Upwind Scheme | |
C | 3rd Order Upwind Scheme | |
16 |
|
C | o reduced to 2nd or 3rd Order near a boundary | |
17 |
C |==========================================================| |
C |==========================================================| |
18 |
IMPLICIT NONE |
IMPLICIT NONE |
19 |
|
|
31 |
|
|
32 |
C == Local variables == |
C == Local variables == |
33 |
INTEGER i,j,kp1,km1,km2 |
INTEGER i,j,kp1,km1,km2 |
34 |
_RL Cr,Rjm,Rj,Rjp,Rjjm,Rjjp |
_RL Rjm,Rj,Rjp,Rjjm,Rjjp |
35 |
#include "GAD_FLUX_LIMITER.h" |
_RL maskM2, maskP1 |
36 |
|
|
37 |
km2=MAX(1,k-2) |
km2=MAX(1,k-2) |
38 |
km1=MAX(1,k-1) |
km1=MAX(1,k-1) |
39 |
kp1=MIN(Nr,k+1) |
kp1=MIN(Nr,k+1) |
40 |
|
maskM2 = 1. |
41 |
|
maskP1 = 1. |
42 |
|
IF (k.LE.2) maskM2 = 0. |
43 |
|
IF (k.GE.Nr) maskP1 = 0. |
44 |
|
|
45 |
IF ( k.EQ.1 .OR. k.GT.Nr ) THEN |
IF ( k.EQ.1 .OR. k.GT.Nr ) THEN |
46 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
52 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
53 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
54 |
Rjp=(tracer(i,j,kp1,bi,bj)-tracer(i,j,k,bi,bj)) |
Rjp=(tracer(i,j,kp1,bi,bj)-tracer(i,j,k,bi,bj)) |
55 |
& *maskC(i,j,kp1,bi,bj) |
c & *maskC(i,j,kp1,bi,bj) |
56 |
Rj=(tracer(i,j,k,bi,bj)-tracer(i,j,km1,bi,bj)) |
Rj=(tracer(i,j,k,bi,bj)-tracer(i,j,km1,bi,bj)) |
57 |
Rjm=(tracer(i,j,km1,bi,bj)-tracer(i,j,km2,bi,bj)) |
Rjm=(tracer(i,j,km1,bi,bj)-tracer(i,j,km2,bi,bj)) |
58 |
& *maskC(i,j,km2,bi,bj) |
c & *maskC(i,j,km2,bi,bj) |
59 |
Rjjp=Rjp-Rj |
C- jmc: mask not needed here above if Rjjp & Rjjm & rTrans are masked |
60 |
Rjjm=Rj-Rjm |
Rjjp=(Rjp-Rj)*maskC(i,j,kp1,bi,bj)*maskP1 |
61 |
|
Rjjm=(Rj-Rjm)*maskC(i,j,km2,bi,bj)*maskM2 |
62 |
wT(i,j) = maskC(i,j,km1,bi,bj)*( |
wT(i,j) = maskC(i,j,km1,bi,bj)*( |
63 |
& rTrans(i,j)*( |
& rTrans(i,j)*( |
64 |
& (Tracer(i,j,k,bi,bj)+Tracer(i,j,km1,bi,bj))*0.5 _d 0 |
& (Tracer(i,j,k,bi,bj)+Tracer(i,j,km1,bi,bj))*0.5 _d 0 |