8 |
C !INTERFACE: |
C !INTERFACE: |
9 |
SUBROUTINE GAD_IMPLICIT_R( |
SUBROUTINE GAD_IMPLICIT_R( |
10 |
I implicitAdvection, advectionScheme, tracerIdentity, |
I implicitAdvection, advectionScheme, tracerIdentity, |
11 |
|
I deltaTLev, |
12 |
I kappaRX, wVel, tracer, |
I kappaRX, wVel, tracer, |
13 |
U gTracer, |
U gTracer, |
14 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
40 |
LOGICAL implicitAdvection |
LOGICAL implicitAdvection |
41 |
INTEGER advectionScheme |
INTEGER advectionScheme |
42 |
INTEGER tracerIdentity |
INTEGER tracerIdentity |
43 |
|
_RL deltaTLev(Nr) |
44 |
_RL kappaRX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL kappaRX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
45 |
_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) |
46 |
_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) |
135 |
DO k=2,Nr |
DO k=2,Nr |
136 |
DO j=jMin,jMax |
DO j=jMin,jMax |
137 |
DO i=iMin,iMax |
DO i=iMin,iMax |
138 |
b5d(i,j,k) = -dTtracerLev(k)*maskC(i,j,k-1,bi,bj) |
b5d(i,j,k) = -deltaTLev(k)*maskC(i,j,k-1,bi,bj) |
139 |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
140 |
& *kappaRX(i,j, k )*recip_drC( k ) |
& *kappaRX(i,j, k )*recip_drC( k ) |
141 |
ENDDO |
ENDDO |
145 |
DO k=1,Nr-1 |
DO k=1,Nr-1 |
146 |
DO j=jMin,jMax |
DO j=jMin,jMax |
147 |
DO i=iMin,iMax |
DO i=iMin,iMax |
148 |
d5d(i,j,k) = -dTtracerLev(k)*maskC(i,j,k+1,bi,bj) |
d5d(i,j,k) = -deltaTLev(k)*maskC(i,j,k+1,bi,bj) |
149 |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
150 |
& *KappaRX(i,j,k+1)*recip_drC(k+1) |
& *KappaRX(i,j,k+1)*recip_drC(k+1) |
151 |
ENDDO |
ENDDO |
208 |
DO i=iMin,iMax |
DO i=iMin,iMax |
209 |
c localTijk(i,j,k) = gTracer(i,j,k,bi,bj) |
c localTijk(i,j,k) = gTracer(i,j,k,bi,bj) |
210 |
gTracer(i,j,k,bi,bj) = gTracer(i,j,k,bi,bj) |
gTracer(i,j,k,bi,bj) = gTracer(i,j,k,bi,bj) |
211 |
& + dTtracerLev(1)*recip_rA(i,j,bi,bj) |
& + deltaTLev(1)*recip_rA(i,j,bi,bj) |
212 |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
213 |
& *tracer(i,j,k,bi,bj)*(rTransKp1(i,j)-rTrans(i,j))*rkSign |
& *tracer(i,j,k,bi,bj)*(rTransKp1(i,j)-rTrans(i,j))*rkSign |
214 |
ENDDO |
ENDDO |
226 |
IF ( advectionScheme.EQ.ENUM_CENTERED_2ND ) THEN |
IF ( advectionScheme.EQ.ENUM_CENTERED_2ND ) THEN |
227 |
diagonalNumber = 3 |
diagonalNumber = 3 |
228 |
CALL GAD_C2_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
CALL GAD_C2_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
229 |
I dTtracerLev, rTrans, |
I deltaTLev, rTrans, |
230 |
U b5d, c5d, d5d, |
U b5d, c5d, d5d, |
231 |
I myThid ) |
I myThid ) |
232 |
ELSEIF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
ELSEIF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
233 |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
234 |
diagonalNumber = 3 |
diagonalNumber = 3 |
235 |
CALL GAD_DST2U1_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
CALL GAD_DST2U1_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
236 |
I advectionScheme, dTtracerLev, rTrans, |
I advectionScheme, deltaTLev, rTrans, |
237 |
U b5d, c5d, d5d, |
U b5d, c5d, d5d, |
238 |
I myThid ) |
I myThid ) |
239 |
ELSEIF ( advectionScheme.EQ.ENUM_FLUX_LIMIT ) THEN |
ELSEIF ( advectionScheme.EQ.ENUM_FLUX_LIMIT ) THEN |
240 |
diagonalNumber = 3 |
diagonalNumber = 3 |
241 |
CALL GAD_FLUXLIMIT_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
CALL GAD_FLUXLIMIT_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
242 |
I dTtracerLev, rTrans, localTijk, |
I deltaTLev, rTrans, localTijk, |
243 |
U b5d, c5d, d5d, |
U b5d, c5d, d5d, |
244 |
I myThid ) |
I myThid ) |
245 |
ELSEIF ( advectionScheme.EQ.ENUM_UPWIND_3RD |
ELSEIF ( advectionScheme.EQ.ENUM_UPWIND_3RD |
247 |
& .OR. advectionScheme.EQ.ENUM_DST3 ) THEN |
& .OR. advectionScheme.EQ.ENUM_DST3 ) THEN |
248 |
diagonalNumber = 5 |
diagonalNumber = 5 |
249 |
CALL GAD_U3C4_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
CALL GAD_U3C4_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
250 |
I advectionScheme, dTtracerLev, rTrans, |
I advectionScheme, deltaTLev, rTrans, |
251 |
U a5d, b5d, c5d, d5d, e5d, |
U a5d, b5d, c5d, d5d, e5d, |
252 |
I myThid ) |
I myThid ) |
253 |
ELSEIF ( advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF ( advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
254 |
diagonalNumber = 5 |
diagonalNumber = 5 |
255 |
CALL GAD_DST3FL_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
CALL GAD_DST3FL_IMPL_R( bi,bj,k, iMin,iMax,jMin,jMax, |
256 |
I dTtracerLev, rTrans, localTijk, |
I deltaTLev, rTrans, localTijk, |
257 |
U a5d, b5d, c5d, d5d, e5d, |
U a5d, b5d, c5d, d5d, e5d, |
258 |
I myThid ) |
I myThid ) |
259 |
ELSE |
ELSE |