88 |
INTEGER GAD_TR |
INTEGER GAD_TR |
89 |
LOGICAL calcAdvection |
LOGICAL calcAdvection |
90 |
INTEGER iterNb |
INTEGER iterNb |
91 |
|
_RL gTr_AB (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
92 |
|
#ifdef ALLOW_DIAGNOSTICS |
93 |
|
CHARACTER*8 diagName |
94 |
|
CHARACTER*4 diagSufx |
95 |
|
C- Functions: |
96 |
|
CHARACTER*4 GAD_DIAG_SUFX |
97 |
|
EXTERNAL GAD_DIAG_SUFX |
98 |
|
#endif /* ALLOW_DIAGNOSTICS */ |
99 |
CEOP |
CEOP |
100 |
|
|
101 |
C Loop ranges for daughter routines |
C Loop ranges for daughter routines |
130 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
131 |
|
|
132 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
133 |
rFlx(1,1,kDown,iTracer) = rFlx(1,1,kDown,iTracer) |
rFlx(1,1,kDown,iTracer) = rFlx(1,1,kDown,iTracer) |
134 |
c |
c |
135 |
CADJ STORE pTracer(:,:,k,bi,bj,iTracer) |
CADJ STORE pTracer(:,:,k,bi,bj,iTracer) |
136 |
CADJ & = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte |
CADJ & = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte |
178 |
|
|
179 |
C If using Adams-Bashforth II, then extrapolate tendencies |
C If using Adams-Bashforth II, then extrapolate tendencies |
180 |
C gPtr is now the tracer tendency for explicit advection/diffusion |
C gPtr is now the tracer tendency for explicit advection/diffusion |
|
IF ( PTRACERS_AdamsBashGtr(iTracer) ) THEN |
|
181 |
#ifdef ALLOW_MATRIX |
#ifdef ALLOW_MATRIX |
182 |
C If matrix is being computed, block call to S/R ADAMS_BASHFORTH2 to |
C If matrix is being computed, skip call to S/R ADAMS_BASHFORTH2 to |
183 |
C prevent gPtr from being replaced by the average of gPtr and gpTrNm1. |
C prevent gPtr from being replaced by the average of gPtr and gpTrNm1. |
184 |
IF (.NOT.useMATRIX) THEN |
IF ( .NOT.useMATRIX .AND. |
185 |
#endif |
& PTRACERS_AdamsBashGtr(iTracer) ) THEN |
186 |
|
#else /* ALLOW_MATRIX */ |
187 |
|
IF ( PTRACERS_AdamsBashGtr(iTracer) ) THEN |
188 |
|
#endif /* ALLOW_MATRIX */ |
189 |
C compute iter at beginning of ptracer time step |
C compute iter at beginning of ptracer time step |
190 |
#ifdef ALLOW_LONGSTEP |
#ifdef ALLOW_LONGSTEP |
191 |
iterNb = myIter - LS_nIter + 1 |
iterNb = myIter - LS_nIter + 1 |
195 |
IF (staggerTimeStep) iterNb = myIter - 1 |
IF (staggerTimeStep) iterNb = myIter - 1 |
196 |
#endif |
#endif |
197 |
CALL ADAMS_BASHFORTH2( |
CALL ADAMS_BASHFORTH2( |
198 |
I bi,bj,K, |
I bi,bj,k, |
199 |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
200 |
U gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer), |
U gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer), |
201 |
|
U gTr_AB, |
202 |
I PTRACERS_startAB(iTracer), iterNb, myThid ) |
I PTRACERS_startAB(iTracer), iterNb, myThid ) |
203 |
#ifdef ALLOW_MATRIX |
#ifdef ALLOW_DIAGNOSTICS |
204 |
|
IF ( useDiagnostics ) THEN |
205 |
|
diagSufx = GAD_DIAG_SUFX( GAD_TR, myThid ) |
206 |
|
diagName = 'AB_g'//diagSufx |
207 |
|
CALL DIAGNOSTICS_FILL(gTr_AB,diagName,k,1,2,bi,bj,myThid) |
208 |
ENDIF |
ENDIF |
209 |
#endif |
#endif /* ALLOW_DIAGNOSTICS */ |
210 |
ENDIF |
ENDIF |
211 |
|
|
212 |
C External forcing term(s) |
C External forcing term(s) |
213 |
IF ( tracForcingOutAB.EQ.1 ) |
IF ( tracForcingOutAB.EQ.1 ) |
221 |
C Account for change in level thickness |
C Account for change in level thickness |
222 |
IF (nonlinFreeSurf.GT.0) THEN |
IF (nonlinFreeSurf.GT.0) THEN |
223 |
CALL FREESURF_RESCALE_G( |
CALL FREESURF_RESCALE_G( |
224 |
I bi,bj,K, |
I bi,bj,k, |
225 |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
U gPtr(1-Olx,1-Oly,1,1,1,iTracer), |
226 |
I myThid ) |
I myThid ) |
227 |
IF ( PTRACERS_AdamsBashGtr(iTracer) ) |
IF ( PTRACERS_AdamsBashGtr(iTracer) ) |
228 |
& CALL FREESURF_RESCALE_G( |
& CALL FREESURF_RESCALE_G( |
229 |
I bi,bj,K, |
I bi,bj,k, |
230 |
U gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer), |
U gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer), |
231 |
I myThid ) |
I myThid ) |
232 |
ENDIF |
ENDIF |