4 |
#include "GAD_OPTIONS.h" |
#include "GAD_OPTIONS.h" |
5 |
|
|
6 |
SUBROUTINE GAD_FLUXLIMIT_ADV_R( |
SUBROUTINE GAD_FLUXLIMIT_ADV_R( |
7 |
I bi,bj,k,deltaT, |
I bi_arg,bj_arg,k,dTarg, |
8 |
I rTrans, wVel, |
I rTrans, wVel, |
9 |
I tracer, |
I tracer, |
10 |
O wT, |
O wT, |
19 |
C == GLobal variables == |
C == GLobal variables == |
20 |
#include "SIZE.h" |
#include "SIZE.h" |
21 |
#include "GRID.h" |
#include "GRID.h" |
22 |
|
#include "EEPARAMS.h" |
23 |
|
#include "PARAMS.h" |
24 |
|
|
25 |
C == Routine arguments == |
C == Routine arguments == |
26 |
INTEGER bi,bj,k |
INTEGER bi_arg,bj_arg,k |
27 |
_RL deltaT |
_RL dTarg |
28 |
_RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL rTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
29 |
_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) |
30 |
_RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
_RL tracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
32 |
INTEGER myThid |
INTEGER myThid |
33 |
|
|
34 |
C == Local variables == |
C == Local variables == |
35 |
INTEGER i,j,kp1,km1,km2 |
INTEGER i,j,kp1,km1,km2,bi,bj |
36 |
_RL Cr,Rjm,Rj,Rjp |
_RL Cr,Rjm,Rj,Rjp |
37 |
#include "GAD_FLUX_LIMITER.h" |
#include "GAD_FLUX_LIMITER.h" |
38 |
|
|
39 |
|
IF (.NOT. multiDimAdvection) THEN |
40 |
|
C If using the standard time-stepping/advection schemes (ie. AB-II) |
41 |
|
C then the data-structures are all global arrays |
42 |
|
bi=bi_arg |
43 |
|
bj=bj_arg |
44 |
|
ELSE |
45 |
|
C otherwise if using the multi-dimensional advection schemes |
46 |
|
C then the data-structures are all local arrays except |
47 |
|
C for maskC(...) and wVel(...) |
48 |
|
bi=1 |
49 |
|
bj=1 |
50 |
|
ENDIF |
51 |
|
|
52 |
km2=MAX(1,k-2) |
km2=MAX(1,k-2) |
53 |
km1=MAX(1,k-1) |
km1=MAX(1,k-1) |
54 |
kp1=MIN(Nr,k+1) |
kp1=MIN(Nr,k+1) |
81 |
ENDIF |
ENDIF |
82 |
ENDIF |
ENDIF |
83 |
Cr=Limiter(Cr) |
Cr=Limiter(Cr) |
84 |
wT(i,j) = maskC(i,j,kM1,bi,bj)*( |
wT(i,j) = maskC(i,j,kM1,bi_arg,bj_arg)*( |
85 |
& rTrans(i,j)* |
& rTrans(i,j)* |
86 |
& (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 |
87 |
& +(ABS(rTrans(i,j))*(1-Cr) |
& +(ABS(rTrans(i,j))*(1-Cr) |
88 |
& +rTrans(i,j)*wVel(i,j,k,bi,bj)*deltaT*recip_drC(k) |
& +rTrans(i,j)*wVel(i,j,k,bi_arg,bj_arg)*dTarg*recip_drC(k) |
89 |
& *Cr |
& *Cr |
90 |
& )*Rj*0.5 _d 0 ) |
& )*Rj*0.5 _d 0 ) |
91 |
ENDDO |
ENDDO |