208 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
209 |
act1 = bi - myBxLo(myThid) |
act1 = bi - myBxLo(myThid) |
210 |
max1 = myBxHi(myThid) - myBxLo(myThid) + 1 |
max1 = myBxHi(myThid) - myBxLo(myThid) + 1 |
|
|
|
211 |
act2 = bj - myByLo(myThid) |
act2 = bj - myByLo(myThid) |
212 |
max2 = myByHi(myThid) - myByLo(myThid) + 1 |
max2 = myByHi(myThid) - myByLo(myThid) + 1 |
|
|
|
213 |
act3 = myThid - 1 |
act3 = myThid - 1 |
214 |
max3 = nTx*nTy |
max3 = nTx*nTy |
|
|
|
215 |
act4 = ikey_dynamics - 1 |
act4 = ikey_dynamics - 1 |
|
|
|
216 |
ikey = (act1 + 1) + act2*max1 |
ikey = (act1 + 1) + act2*max1 |
217 |
& + act3*max1*max2 |
& + act3*max1*max2 |
218 |
& + act4*max1*max2*max3 |
& + act4*max1*max2*max3 |
256 |
|
|
257 |
|
|
258 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
259 |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
260 |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
261 |
|
#ifdef ALLOW_KPP |
262 |
|
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
263 |
|
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
264 |
|
#endif |
265 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
266 |
|
|
267 |
C-- Start of diagnostic loop |
C-- Start of diagnostic loop |
338 |
|
|
339 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
340 |
cph avoids recomputation of integrate_for_w |
cph avoids recomputation of integrate_for_w |
341 |
CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
342 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
343 |
|
|
344 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
415 |
|
|
416 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
417 |
CADJ STORE KPPghat (:,:,:,bi,bj) |
CADJ STORE KPPghat (:,:,:,bi,bj) |
|
CADJ & , KPPviscAz (:,:,:,bi,bj) |
|
418 |
CADJ & , KPPdiffKzT(:,:,:,bi,bj) |
CADJ & , KPPdiffKzT(:,:,:,bi,bj) |
419 |
CADJ & , KPPdiffKzS(:,:,:,bi,bj) |
CADJ & , KPPdiffKzS(:,:,:,bi,bj) |
420 |
CADJ & , KPPfrac (:,: ,bi,bj) |
CADJ & , KPPfrac (:,: ,bi,bj) |
424 |
#endif /* ALLOW_KPP */ |
#endif /* ALLOW_KPP */ |
425 |
|
|
426 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
427 |
CADJ STORE KappaRT(:,:,:) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE KappaRT(:,:,:) = comlev1_bibj, key=ikey, byte=isbyte |
428 |
CADJ STORE KappaRS(:,:,:) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE KappaRS(:,:,:) = comlev1_bibj, key=ikey, byte=isbyte |
429 |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
430 |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
431 |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
432 |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
433 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
434 |
CADJ STORE tr1 (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte |
CADJ STORE tr1 (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte |
435 |
#endif |
#endif |
436 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
437 |
|
|
447 |
|
|
448 |
C-- Some advection schemes are better calculated using a multi-dimensional |
C-- Some advection schemes are better calculated using a multi-dimensional |
449 |
C method in the absence of any other terms and, if used, is done here. |
C method in the absence of any other terms and, if used, is done here. |
450 |
|
|
451 |
|
#ifdef ALLOW_MULTIDIM_ADVECTION |
452 |
IF (multiDimAdvection) THEN |
IF (multiDimAdvection) THEN |
453 |
IF (tempStepping .AND. |
IF (tempStepping .AND. |
454 |
& tempAdvScheme.NE.ENUM_CENTERED_2ND .AND. |
& tempAdvScheme.NE.ENUM_CENTERED_2ND .AND. |
455 |
& tempAdvScheme.NE.ENUM_UPWIND_3RD .AND. |
& tempAdvScheme.NE.ENUM_UPWIND_3RD .AND. |
456 |
& tempAdvScheme.NE.ENUM_CENTERED_4TH ) |
& tempAdvScheme.NE.ENUM_CENTERED_4TH ) THEN |
457 |
& CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE,theta, |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
458 |
U gT, |
U theta,gT, |
459 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
460 |
|
ENDIF |
461 |
IF (saltStepping .AND. |
IF (saltStepping .AND. |
462 |
& saltAdvScheme.NE.ENUM_CENTERED_2ND .AND. |
& saltAdvScheme.NE.ENUM_CENTERED_2ND .AND. |
463 |
& saltAdvScheme.NE.ENUM_UPWIND_3RD .AND. |
& saltAdvScheme.NE.ENUM_UPWIND_3RD .AND. |
464 |
& saltAdvScheme.NE.ENUM_CENTERED_4TH ) |
& saltAdvScheme.NE.ENUM_CENTERED_4TH ) THEN |
465 |
& CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY,salt, |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
466 |
U gS, |
U salt,gS, |
467 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
468 |
|
ENDIF |
469 |
ENDIF |
ENDIF |
470 |
|
#endif /* ALLOW_MULTIDIM_ADVECTION */ |
471 |
|
|
472 |
C-- Start of thermodynamics loop |
C-- Start of thermodynamics loop |
473 |
DO k=Nr,1,-1 |
DO k=Nr,1,-1 |
528 |
CALL TIMESTEP_TRACER( |
CALL TIMESTEP_TRACER( |
529 |
I bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme, |
I bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme, |
530 |
I theta, gT, |
I theta, gT, |
|
U gTnm1, |
|
531 |
I myIter, myThid) |
I myIter, myThid) |
532 |
ENDIF |
ENDIF |
533 |
IF ( saltStepping ) THEN |
IF ( saltStepping ) THEN |
540 |
CALL TIMESTEP_TRACER( |
CALL TIMESTEP_TRACER( |
541 |
I bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme, |
I bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme, |
542 |
I salt, gS, |
I salt, gS, |
|
U gSnm1, |
|
543 |
I myIter, myThid) |
I myIter, myThid) |
544 |
ENDIF |
ENDIF |
545 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
553 |
CALL TIMESTEP_TRACER( |
CALL TIMESTEP_TRACER( |
554 |
I bi,bj,iMin,iMax,jMin,jMax,k,tracerAdvScheme, |
I bi,bj,iMin,iMax,jMin,jMax,k,tracerAdvScheme, |
555 |
I Tr1, gTr1, |
I Tr1, gTr1, |
|
U gTr1NM1, |
|
556 |
I myIter,myThid) |
I myIter,myThid) |
557 |
ENDIF |
ENDIF |
558 |
#endif |
#endif |
567 |
C-- Freeze water |
C-- Freeze water |
568 |
IF (allowFreezing) THEN |
IF (allowFreezing) THEN |
569 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
570 |
CADJ STORE gTNm1(:,:,k,bi,bj) = comlev1_bibj_k |
CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k |
571 |
CADJ & , key = kkey, byte = isbyte |
CADJ & , key = kkey, byte = isbyte |
572 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
573 |
CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid ) |
CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid ) |
593 |
IF (tempStepping) THEN |
IF (tempStepping) THEN |
594 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
595 |
idkey = iikey + 1 |
idkey = iikey + 1 |
596 |
CADJ STORE gTNm1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
597 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
598 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
599 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
605 |
IF (saltStepping) THEN |
IF (saltStepping) THEN |
606 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
607 |
idkey = iikey + 2 |
idkey = iikey + 2 |
608 |
CADJ STORE gSNm1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
609 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
610 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
611 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
617 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
618 |
IF (tr1Stepping) THEN |
IF (tr1Stepping) THEN |
619 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
620 |
CADJ STORE gTr1Nm1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
621 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
622 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
623 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |