19 |
SUBROUTINE THERMODYNAMICS(myTime, myIter, myThid) |
SUBROUTINE THERMODYNAMICS(myTime, myIter, myThid) |
20 |
C !DESCRIPTION: \bv |
C !DESCRIPTION: \bv |
21 |
C *==========================================================* |
C *==========================================================* |
22 |
C | SUBROUTINE THERMODYNAMICS |
C | SUBROUTINE THERMODYNAMICS |
23 |
C | o Controlling routine for the prognostic part of the |
C | o Controlling routine for the prognostic part of the |
24 |
C | thermo-dynamics. |
C | thermo-dynamics. |
25 |
C *=========================================================== |
C *=========================================================== |
26 |
C | The algorithm... |
C | The algorithm... |
27 |
C | |
C | |
80 |
#ifdef ALLOW_GENERIC_ADVDIFF |
#ifdef ALLOW_GENERIC_ADVDIFF |
81 |
#include "GAD.h" |
#include "GAD.h" |
82 |
#endif |
#endif |
|
#ifdef ALLOW_OFFLINE |
|
|
#include "OFFLINE.h" |
|
|
#endif |
|
83 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
84 |
#include "PTRACERS_SIZE.h" |
#include "PTRACERS_SIZE.h" |
85 |
#include "PTRACERS.h" |
#include "PTRACERS.h" |
177 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
178 |
& CALL DEBUG_ENTER('THERMODYNAMICS',myThid) |
& CALL DEBUG_ENTER('THERMODYNAMICS',myThid) |
179 |
#endif |
#endif |
180 |
|
|
181 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
182 |
C-- dummy statement to end declaration part |
C-- dummy statement to end declaration part |
183 |
ikey = 1 |
ikey = 1 |
331 |
C recomputation. It *is* differentiable, if you need it. |
C recomputation. It *is* differentiable, if you need it. |
332 |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
333 |
C disable this section of code. |
C disable this section of code. |
|
#ifndef ALLOW_OFFLINE |
|
334 |
IF (tempMultiDimAdvec) THEN |
IF (tempMultiDimAdvec) THEN |
335 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
336 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
343 |
O gT, |
O gT, |
344 |
I bi,bj,myTime,myIter,myThid) |
I bi,bj,myTime,myIter,myThid) |
345 |
ENDIF |
ENDIF |
|
#endif |
|
|
#ifndef ALLOW_OFFLINE |
|
346 |
IF (saltMultiDimAdvec) THEN |
IF (saltMultiDimAdvec) THEN |
347 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
348 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
355 |
O gS, |
O gS, |
356 |
I bi,bj,myTime,myIter,myThid) |
I bi,bj,myTime,myIter,myThid) |
357 |
ENDIF |
ENDIF |
358 |
#endif |
|
359 |
C Since passive tracers are configurable separately from T,S we |
C Since passive tracers are configurable separately from T,S we |
360 |
C call the multi-dimensional method for PTRACERS regardless |
C call the multi-dimensional method for PTRACERS regardless |
361 |
C of whether multiDimAdvection is set or not. |
C of whether multiDimAdvection is set or not. |
478 |
|
|
479 |
C-- Calculate active tracer tendencies (gT,gS,...) |
C-- Calculate active tracer tendencies (gT,gS,...) |
480 |
C and step forward storing result in gT, gS, etc. |
C and step forward storing result in gT, gS, etc. |
|
#ifndef ALLOW_OFFLINE |
|
481 |
C-- |
C-- |
482 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
483 |
# if (defined (NONLIN_FRSURF) && defined (ALLOW_GMREDI)) |
# if (defined (NONLIN_FRSURF) && defined (ALLOW_GMREDI)) |
518 |
ENDIF |
ENDIF |
519 |
#endif |
#endif |
520 |
ENDIF |
ENDIF |
|
#endif |
|
521 |
|
|
|
#ifndef ALLOW_OFFLINE |
|
522 |
IF ( saltStepping ) THEN |
IF ( saltStepping ) THEN |
523 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
524 |
CADJ STORE gSnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE gSnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
550 |
ENDIF |
ENDIF |
551 |
#endif |
#endif |
552 |
ENDIF |
ENDIF |
553 |
#endif |
|
554 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
555 |
IF ( usePTRACERS ) THEN |
IF ( usePTRACERS ) THEN |
556 |
IF ( .NOT.implicitDiffusion ) THEN |
IF ( .NOT.implicitDiffusion ) THEN |
582 |
C-- Freeze water |
C-- Freeze water |
583 |
C this bit of code is left here for backward compatibility. |
C this bit of code is left here for backward compatibility. |
584 |
C freezing at surface level has been moved to FORWARD_STEP |
C freezing at surface level has been moved to FORWARD_STEP |
|
#ifndef ALLOW_OFFLINE |
|
585 |
IF ( useOldFreezing .AND. .NOT. useSEAICE |
IF ( useOldFreezing .AND. .NOT. useSEAICE |
586 |
& .AND. .NOT.(useThSIce.AND.k.EQ.1) ) THEN |
& .AND. .NOT.(useThSIce.AND.k.EQ.1) ) THEN |
587 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
590 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
591 |
CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid ) |
CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid ) |
592 |
ENDIF |
ENDIF |
|
#endif |
|
593 |
|
|
594 |
C-- end of thermodynamic k loop (Nr:1) |
C-- end of thermodynamic k loop (Nr:1) |
595 |
ENDDO |
ENDDO |
610 |
jMax = sNy |
jMax = sNy |
611 |
|
|
612 |
C-- Implicit vertical advection & diffusion |
C-- Implicit vertical advection & diffusion |
|
#ifndef ALLOW_OFFLINE |
|
613 |
IF ( tempStepping .AND. implicitDiffusion ) THEN |
IF ( tempStepping .AND. implicitDiffusion ) THEN |
614 |
CALL CALC_3D_DIFFUSIVITY( |
CALL CALC_3D_DIFFUSIVITY( |
615 |
I bi,bj,iMin,iMax,jMin,jMax, |
I bi,bj,iMin,iMax,jMin,jMax, |
638 |
U gT, |
U gT, |
639 |
I myThid ) |
I myThid ) |
640 |
ENDIF |
ENDIF |
|
#endif /* ndef ALLOW_OFFLINE */ |
|
641 |
|
|
642 |
#ifdef ALLOW_TIMEAVE |
#ifdef ALLOW_TIMEAVE |
643 |
useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90 |
useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90 |
653 |
ENDIF |
ENDIF |
654 |
#endif /* ALLOW_TIMEAVE */ |
#endif /* ALLOW_TIMEAVE */ |
655 |
|
|
|
#ifndef ALLOW_OFFLINE |
|
656 |
IF ( saltStepping .AND. implicitDiffusion ) THEN |
IF ( saltStepping .AND. implicitDiffusion ) THEN |
657 |
CALL CALC_3D_DIFFUSIVITY( |
CALL CALC_3D_DIFFUSIVITY( |
658 |
I bi,bj,iMin,iMax,jMin,jMax, |
I bi,bj,iMin,iMax,jMin,jMax, |
682 |
U gS, |
U gS, |
683 |
I myThid ) |
I myThid ) |
684 |
ENDIF |
ENDIF |
|
#endif |
|
685 |
|
|
686 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
687 |
IF ( usePTRACERS ) THEN |
IF ( usePTRACERS ) THEN |