150 |
|
|
151 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
152 |
|
|
|
C- Loop ranges for daughter routines |
|
|
iMin = 1-OLx+2 |
|
|
iMax = sNx+OLx-1 |
|
|
jMin = 1-OLy+2 |
|
|
jMax = sNy+OLy-1 |
|
|
|
|
153 |
iterNb = myIter |
iterNb = myIter |
154 |
IF (staggerTimeStep) iterNb = myIter - 1 |
IF (staggerTimeStep) iterNb = myIter - 1 |
155 |
|
|
156 |
|
C- Loop ranges for daughter routines: |
157 |
|
c iMin = 1 |
158 |
|
c iMax = sNx |
159 |
|
c jMin = 1 |
160 |
|
c jMax = sNy |
161 |
|
C Regarding model dynamics, only needs to get correct tracer tendency |
162 |
|
C (gT_loc) in tile interior (1:sNx,1:sNy); |
163 |
|
C However, for some diagnostics, we may want to get valid tendency |
164 |
|
C extended over 1 point in tile halo region (0:sNx+1,0:sNy=1). |
165 |
|
iMin = 0 |
166 |
|
iMax = sNx+1 |
167 |
|
jMin = 0 |
168 |
|
jMax = sNy+1 |
169 |
|
|
170 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
171 |
diagForcing = .FALSE. |
diagForcing = .FALSE. |
172 |
diagAB_tend = .FALSE. |
diagAB_tend = .FALSE. |
189 |
& + act4*max1*max2*max3 |
& + act4*max1*max2*max3 |
190 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
191 |
|
|
192 |
|
C- Apply AB on T : |
193 |
|
IF ( AdamsBashforth_T ) THEN |
194 |
|
C compute T^n+1/2 (stored in gtNm) extrapolating T forward in time |
195 |
|
#ifdef ALLOW_ADAMSBASHFORTH_3 |
196 |
|
c m1 = 1 + MOD(iterNb+1,2) |
197 |
|
c m2 = 1 + MOD( iterNb ,2) |
198 |
|
CALL ADAMS_BASHFORTH3( |
199 |
|
I bi, bj, 0, Nr, |
200 |
|
I theta(1-OLx,1-OLy,1,bi,bj), |
201 |
|
U gtNm, gt_AB, |
202 |
|
I tempStartAB, iterNb, myThid ) |
203 |
|
#else /* ALLOW_ADAMSBASHFORTH_3 */ |
204 |
|
CALL ADAMS_BASHFORTH2( |
205 |
|
I bi, bj, 0, Nr, |
206 |
|
I theta(1-OLx,1-OLy,1,bi,bj), |
207 |
|
U gtNm1(1-OLx,1-OLy,1,bi,bj), gt_AB, |
208 |
|
I tempStartAB, iterNb, myThid ) |
209 |
|
#endif /* ALLOW_ADAMSBASHFORTH_3 */ |
210 |
|
ENDIF |
211 |
|
|
212 |
C- Tracer tendency needs to be set to zero (moved here from gad_calc_rhs): |
C- Tracer tendency needs to be set to zero (moved here from gad_calc_rhs): |
213 |
DO k=1,Nr |
DO k=1,Nr |
214 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
231 |
ENDDO |
ENDDO |
232 |
ENDDO |
ENDDO |
233 |
ENDDO |
ENDDO |
234 |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE wFld(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
235 |
CADJ STORE wFld(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
236 |
|
# ifdef ALLOW_ADAMSBASHFORTH_3 |
237 |
|
CADJ STORE gtNm(:,:,:,bi,bj,1) = comlev1_bibj, key=itdkey, byte=isbyte |
238 |
|
CADJ STORE gtNm(:,:,:,bi,bj,2) = comlev1_bibj, key=itdkey, byte=isbyte |
239 |
|
# else |
240 |
|
CADJ STORE gtNm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
241 |
|
# endif |
242 |
#endif /* ALLOW_AUTODIFF */ |
#endif /* ALLOW_AUTODIFF */ |
243 |
|
|
244 |
#ifdef INCLUDE_CALC_DIFFUSIVITY_CALL |
#ifdef INCLUDE_CALC_DIFFUSIVITY_CALL |
478 |
U gT_loc, |
U gT_loc, |
479 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
480 |
|
|
|
iMin = 0 |
|
|
iMax = sNx+1 |
|
|
jMin = 0 |
|
|
jMax = sNy+1 |
|
|
|
|
481 |
C-- Implicit vertical advection & diffusion |
C-- Implicit vertical advection & diffusion |
482 |
|
|
483 |
#ifdef INCLUDE_IMPLVERTADV_CODE |
#ifdef INCLUDE_IMPLVERTADV_CODE |
521 |
ENDIF |
ENDIF |
522 |
#endif /* ALLOW_TIMEAVE */ |
#endif /* ALLOW_TIMEAVE */ |
523 |
|
|
|
#ifdef ALLOW_ADAMSBASHFORTH_3 |
|
524 |
IF ( AdamsBashforth_T ) THEN |
IF ( AdamsBashforth_T ) THEN |
525 |
C- Save current tracer field (for AB on tracer) and then update tracer |
C- Save current tracer field (for AB on tracer) and then update tracer |
526 |
|
#ifdef ALLOW_ADAMSBASHFORTH_3 |
527 |
CALL CYCLE_AB_TRACER( |
CALL CYCLE_AB_TRACER( |
528 |
I bi, bj, gT_loc, |
I bi, bj, gT_loc, |
529 |
U theta(1-OLx,1-OLy,1,bi,bj), |
U theta(1-OLx,1-OLy,1,bi,bj), |
530 |
O gtNm(1-OLx,1-OLy,1,bi,bj,m2), |
O gtNm(1-OLx,1-OLy,1,bi,bj,m2), |
531 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
|
ELSEIF ( tempStepping ) THEN |
|
532 |
#else /* ALLOW_ADAMSBASHFORTH_3 */ |
#else /* ALLOW_ADAMSBASHFORTH_3 */ |
533 |
IF ( tempStepping ) THEN |
CALL CYCLE_AB_TRACER( |
534 |
|
I bi, bj, gT_loc, |
535 |
|
U theta(1-OLx,1-OLy,1,bi,bj), |
536 |
|
O gtNm1(1-OLx,1-OLy,1,bi,bj), |
537 |
|
I myTime, myIter, myThid ) |
538 |
#endif /* ALLOW_ADAMSBASHFORTH_3 */ |
#endif /* ALLOW_ADAMSBASHFORTH_3 */ |
539 |
|
ELSE |
540 |
C- Update tracer fields: T(n) = T** |
C- Update tracer fields: T(n) = T** |
541 |
CALL CYCLE_TRACER( |
CALL CYCLE_TRACER( |
542 |
I bi, bj, |
I bi, bj, |