175 |
|
|
176 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
177 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
178 |
& CALL DEBUG_ENTER('FORWARD_STEP',myThid) |
& CALL DEBUG_ENTER('THERMODYNAMICS',myThid) |
179 |
#endif |
#endif |
180 |
|
|
181 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
571 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
572 |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
573 |
#endif |
#endif |
574 |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
CALL GAD_ADVECTION( |
575 |
U theta,gT, |
I tempImplVertAdv,tempAdvScheme,GAD_TEMPERATURE, |
576 |
I myTime,myIter,myThid) |
I uVel, vVel, wVel, theta, |
577 |
|
O gT, |
578 |
|
I bi,bj,myTime,myIter,myThid) |
579 |
ENDIF |
ENDIF |
580 |
IF (saltMultiDimAdvec) THEN |
IF (saltMultiDimAdvec) THEN |
581 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
582 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
583 |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
584 |
#endif |
#endif |
585 |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
CALL GAD_ADVECTION( |
586 |
U salt,gS, |
I saltImplVertAdv,saltAdvScheme,GAD_SALINITY, |
587 |
I myTime,myIter,myThid) |
I uVel, vVel, wVel, salt, |
588 |
|
O gS, |
589 |
|
I bi,bj,myTime,myIter,myThid) |
590 |
ENDIF |
ENDIF |
591 |
C Since passive tracers are configurable separately from T,S we |
C Since passive tracers are configurable separately from T,S we |
592 |
C call the multi-dimensional method for PTRACERS regardless |
C call the multi-dimensional method for PTRACERS regardless |
603 |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
604 |
|
|
605 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
606 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
607 |
& CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid) |
& CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid) |
608 |
#endif |
#endif |
609 |
|
|
748 |
ENDDO |
ENDDO |
749 |
|
|
750 |
|
|
751 |
C-- Implicit diffusion |
C-- Implicit vertical advection & diffusion |
752 |
IF (implicitDiffusion) THEN |
#ifdef INCLUDE_IMPLVERTADV_CODE |
753 |
|
IF ( tempImplVertAdv ) THEN |
754 |
IF (tempStepping) THEN |
CALL GAD_IMPLICIT_R( |
755 |
|
I tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE, |
756 |
|
I kappaRT, wVel, theta, |
757 |
|
U gT, |
758 |
|
I bi, bj, myTime, myIter, myThid ) |
759 |
|
ELSEIF ( tempStepping .AND. implicitDiffusion ) THEN |
760 |
|
#else /* INCLUDE_IMPLVERTADV_CODE */ |
761 |
|
IF ( tempStepping .AND. implicitDiffusion ) THEN |
762 |
|
#endif /* INCLUDE_IMPLVERTADV_CODE */ |
763 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
764 |
CADJ STORE KappaRT(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE KappaRT(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
765 |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
766 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
767 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
768 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
769 |
I deltaTtracer, KappaRT, recip_HFacC, |
I deltaTtracer, KappaRT, recip_HFacC, |
770 |
U gT, |
U gT, |
771 |
I myThid ) |
I myThid ) |
772 |
ENDIF |
ENDIF |
773 |
|
|
774 |
IF (saltStepping) THEN |
#ifdef INCLUDE_IMPLVERTADV_CODE |
775 |
|
IF ( saltImplVertAdv ) THEN |
776 |
|
CALL GAD_IMPLICIT_R( |
777 |
|
I saltImplVertAdv, saltAdvScheme, GAD_SALINITY, |
778 |
|
I kappaRS, wVel, salt, |
779 |
|
U gS, |
780 |
|
I bi, bj, myTime, myIter, myThid ) |
781 |
|
ELSEIF ( saltStepping .AND. implicitDiffusion ) THEN |
782 |
|
#else /* INCLUDE_IMPLVERTADV_CODE */ |
783 |
|
IF ( saltStepping .AND. implicitDiffusion ) THEN |
784 |
|
#endif /* INCLUDE_IMPLVERTADV_CODE */ |
785 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
786 |
CADJ STORE KappaRS(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE KappaRS(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
787 |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
788 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
789 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
790 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
791 |
I deltaTtracer, KappaRS, recip_HFacC, |
I deltaTtracer, KappaRS, recip_HFacC, |
792 |
U gS, |
U gS, |
793 |
I myThid ) |
I myThid ) |
794 |
ENDIF |
ENDIF |
795 |
|
|
796 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
797 |
IF (tr1Stepping) THEN |
IF ( tr1Stepping .AND. implicitDiffusion ) THEN |
798 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
799 |
CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
800 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
803 |
I deltaTtracer, KappaRT, recip_HFacC, |
I deltaTtracer, KappaRT, recip_HFacC, |
804 |
U gTr1, |
U gTr1, |
805 |
I myThid ) |
I myThid ) |
806 |
ENDIF |
ENDIF |
807 |
#endif |
#endif |
808 |
|
|
809 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
810 |
C Vertical diffusion (implicit) for passive tracers |
c #ifdef INCLUDE_IMPLVERTADV_CODE |
811 |
IF ( usePTRACERS ) THEN |
c IF ( usePTRACERS .AND. ptracerImplVertAdv ) THEN |
812 |
|
c ELSEIF ( usePTRACERS .AND. implicitDiffusion ) THEN |
813 |
|
c #else |
814 |
|
IF ( usePTRACERS .AND. implicitDiffusion ) THEN |
815 |
|
C-- Vertical diffusion (implicit) for passive tracers |
816 |
CALL PTRACERS_IMPLDIFF( bi,bj,KappaRS,myThid ) |
CALL PTRACERS_IMPLDIFF( bi,bj,KappaRS,myThid ) |
817 |
ENDIF |
ENDIF |
818 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
819 |
|
|
820 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
821 |
C-- Apply open boundary conditions |
C-- Apply open boundary conditions |
822 |
IF (useOBCS) THEN |
IF ( ( implicitDiffusion |
823 |
|
& .OR. tempImplVertAdv |
824 |
|
& .OR. saltImplVertAdv |
825 |
|
& ) .AND. useOBCS ) THEN |
826 |
DO K=1,Nr |
DO K=1,Nr |
827 |
CALL OBCS_APPLY_TS( bi, bj, k, gT, gS, myThid ) |
CALL OBCS_APPLY_TS( bi, bj, k, gT, gS, myThid ) |
828 |
ENDDO |
ENDDO |
|
END IF |
|
|
#endif /* ALLOW_OBCS */ |
|
|
|
|
|
C-- End If implicitDiffusion |
|
829 |
ENDIF |
ENDIF |
830 |
|
#endif /* ALLOW_OBCS */ |
831 |
|
|
832 |
#ifdef ALLOW_TIMEAVE |
#ifdef ALLOW_TIMEAVE |
|
ceh3 needs an IF ( useTIMEAVE ) THEN |
|
833 |
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
834 |
CALL TIMEAVE_CUMUL_1T(ConvectCountTave, ConvectCount, |
CALL TIMEAVE_CUMUL_1T(ConvectCountTave, ConvectCount, |
835 |
I Nr, deltaTclock, bi, bj, myThid) |
I Nr, deltaTclock, bi, bj, myThid) |
873 |
|
|
874 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
875 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
876 |
& CALL DEBUG_LEAVE('FORWARD_STEP',myThid) |
& CALL DEBUG_LEAVE('THERMODYNAMICS',myThid) |
877 |
#endif |
#endif |
878 |
|
|
879 |
RETURN |
RETURN |