7 |
I bi,bj,iMin,iMax,jMin,jMax,k,kM1,kUp,kDown, |
I bi,bj,iMin,iMax,jMin,jMax,k,kM1,kUp,kDown, |
8 |
I xA,yA,uTrans,vTrans,rTrans,maskUp, |
I xA,yA,uTrans,vTrans,rTrans,maskUp, |
9 |
I diffKh, diffK4, KappaRT, Tracer, |
I diffKh, diffK4, KappaRT, Tracer, |
10 |
I tracerIdentity, |
I tracerIdentity, advectionScheme, |
11 |
U fVerT, gTracer, |
U fVerT, gTracer, |
12 |
I myThid ) |
I myThid ) |
13 |
C /==========================================================\ |
C /==========================================================\ |
37 |
_RL KappaRT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL KappaRT(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
38 |
_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) |
39 |
INTEGER tracerIdentity |
INTEGER tracerIdentity |
40 |
|
INTEGER advectionScheme |
41 |
_RL fVerT (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
_RL fVerT (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
42 |
_RL gTracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
_RL gTracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
43 |
INTEGER myThid |
INTEGER myThid |
94 |
ENDDO |
ENDDO |
95 |
|
|
96 |
C- Advective flux in X |
C- Advective flux in X |
97 |
IF (gad_advection_scheme.EQ.ENUM_CENTERED_2ND) THEN |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
98 |
CALL GAD_C2_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
CALL GAD_C2_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
99 |
ELSEIF (gad_advection_scheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
100 |
CALL GAD_FLUXLIMIT_ADV_X( |
CALL GAD_FLUXLIMIT_ADV_X( |
101 |
& bi,bj,k,deltaTtracer,uTrans,uVel,localT,af,myThid) |
& bi,bj,k,deltaTtracer,uTrans,uVel,localT,af,myThid) |
102 |
ELSEIF (gad_advection_scheme.EQ.ENUM_UPWIND_3RD ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
103 |
CALL GAD_U3_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
CALL GAD_U3_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
104 |
ELSEIF (gad_advection_scheme.EQ.ENUM_CENTERED_4TH) THEN |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
105 |
CALL GAD_C4_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
CALL GAD_C4_ADV_X(bi,bj,k,uTrans,localT,af,myThid) |
106 |
ELSE |
ELSE |
107 |
STOP 'GAD_CALC_RHS: Bad gad_advection_scheme (X)' |
STOP 'GAD_CALC_RHS: Bad advectionScheme (X)' |
108 |
ENDIF |
ENDIF |
109 |
DO j=jMin,jMax |
DO j=jMin,jMax |
110 |
DO i=iMin,iMax |
DO i=iMin,iMax |
158 |
ENDDO |
ENDDO |
159 |
|
|
160 |
C- Advective flux in Y |
C- Advective flux in Y |
161 |
IF (gad_advection_scheme.EQ.ENUM_CENTERED_2ND) THEN |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
162 |
CALL GAD_C2_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
CALL GAD_C2_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
163 |
ELSEIF (gad_advection_scheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
164 |
CALL GAD_FLUXLIMIT_ADV_Y( |
CALL GAD_FLUXLIMIT_ADV_Y( |
165 |
& bi,bj,k,deltaTtracer,vTrans,vVel,localT,af,myThid) |
& bi,bj,k,deltaTtracer,vTrans,vVel,localT,af,myThid) |
166 |
ELSEIF (gad_advection_scheme.EQ.ENUM_UPWIND_3RD ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
167 |
CALL GAD_U3_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
CALL GAD_U3_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
168 |
ELSEIF (gad_advection_scheme.EQ.ENUM_CENTERED_4TH) THEN |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
169 |
CALL GAD_C4_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
CALL GAD_C4_ADV_Y(bi,bj,k,vTrans,localT,af,myThid) |
170 |
ELSE |
ELSE |
171 |
STOP 'GAD_CALC_RHS: Bad gad_advection_scheme (Y)' |
STOP 'GAD_CALC_RHS: Bad advectionScheme (Y)' |
172 |
ENDIF |
ENDIF |
173 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
174 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
225 |
C Note: wVel needs to be masked |
C Note: wVel needs to be masked |
226 |
IF (K.GE.2) THEN |
IF (K.GE.2) THEN |
227 |
C- Compute vertical advective flux in the interior: |
C- Compute vertical advective flux in the interior: |
228 |
IF (gad_advection_scheme.EQ.ENUM_CENTERED_2ND) THEN |
IF (advectionScheme.EQ.ENUM_CENTERED_2ND) THEN |
229 |
CALL GAD_C2_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
CALL GAD_C2_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
230 |
ELSEIF (gad_advection_scheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
231 |
CALL GAD_FLUXLIMIT_ADV_R( |
CALL GAD_FLUXLIMIT_ADV_R( |
232 |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
& bi,bj,k,deltaTtracer,rTrans,wVel,tracer,af,myThid) |
233 |
ELSEIF (gad_advection_scheme.EQ.ENUM_UPWIND_3RD ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_UPWIND_3RD ) THEN |
234 |
CALL GAD_U3_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
CALL GAD_U3_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
235 |
ELSEIF (gad_advection_scheme.EQ.ENUM_CENTERED_4TH) THEN |
ELSEIF (advectionScheme.EQ.ENUM_CENTERED_4TH) THEN |
236 |
CALL GAD_C4_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
CALL GAD_C4_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
237 |
c CALL GAD_C2_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
c CALL GAD_C2_ADV_R(bi,bj,k,rTrans,tracer,af,myThid) |
238 |
ELSE |
ELSE |
239 |
STOP 'GAD_CALC_RHS: Bad gad_advection_scheme (R)' |
STOP 'GAD_CALC_RHS: Bad advectionScheme (R)' |
240 |
ENDIF |
ENDIF |
241 |
C- Surface "correction" term at k>1 : |
C- Surface "correction" term at k>1 : |
242 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |