1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
|
#include "PACKAGES_CONFIG.h" |
5 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
6 |
|
#ifdef ALLOW_PTRACERS |
7 |
|
# include "PTRACERS_OPTIONS.h" |
8 |
|
#endif |
9 |
|
|
10 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
11 |
# ifdef ALLOW_GMREDI |
# ifdef ALLOW_GMREDI |
12 |
# include "GMREDI_OPTIONS.h" |
# include "GMREDI_OPTIONS.h" |
14 |
# ifdef ALLOW_KPP |
# ifdef ALLOW_KPP |
15 |
# include "KPP_OPTIONS.h" |
# include "KPP_OPTIONS.h" |
16 |
# endif |
# endif |
|
# ifdef ALLOW_PTRACERS |
|
|
# include "PTRACERS_OPTIONS.h" |
|
|
# endif |
|
17 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
18 |
|
|
19 |
CBOP |
CBOP |
84 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
85 |
#include "TR1.h" |
#include "TR1.h" |
86 |
#endif |
#endif |
87 |
|
#ifdef ALLOW_PTRACERS |
88 |
|
#include "PTRACERS.h" |
89 |
|
#endif |
90 |
#ifdef ALLOW_TIMEAVE |
#ifdef ALLOW_TIMEAVE |
91 |
#include "TIMEAVE_STATV.h" |
#include "TIMEAVE_STATV.h" |
92 |
#endif |
#endif |
102 |
# ifdef ALLOW_GMREDI |
# ifdef ALLOW_GMREDI |
103 |
# include "GMREDI.h" |
# include "GMREDI.h" |
104 |
# endif |
# endif |
|
# ifdef ALLOW_PTRACERS |
|
|
# include "PTRACERS.h" |
|
|
# endif |
|
|
cswdice --- add ---- |
|
|
# ifdef ALLOW_THERM_SEAICE |
|
|
# include "ICE.h" |
|
|
# endif |
|
|
cswdice ------ |
|
105 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
106 |
|
|
107 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
146 |
_RS maskUp (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RS maskUp (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
147 |
_RL fVerT (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
_RL fVerT (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
148 |
_RL fVerS (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
_RL fVerS (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
149 |
|
#ifdef ALLOW_PASSIVE_TRACER |
150 |
_RL fVerTr1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
_RL fVerTr1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
151 |
|
#endif |
152 |
|
#ifdef ALLOW_PTRACERS |
153 |
|
_RL fVerP (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num) |
154 |
|
#endif |
155 |
_RL rhokm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL rhokm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
156 |
_RL rhok (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL rhok (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
157 |
_RL phiSurfX(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL phiSurfX(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
169 |
INTEGER bi, bj |
INTEGER bi, bj |
170 |
INTEGER i, j |
INTEGER i, j |
171 |
INTEGER k, km1, kup, kDown |
INTEGER k, km1, kup, kDown |
172 |
INTEGER iTracer |
INTEGER iTracer, ip |
173 |
|
|
174 |
CEOP |
CEOP |
175 |
|
|
176 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
177 |
IF (debugMode) CALL DEBUG_ENTER('FORWARD_STEP',myThid) |
IF ( debugLevel .GE. debLevB ) |
178 |
|
& CALL DEBUG_ENTER('FORWARD_STEP',myThid) |
179 |
#endif |
#endif |
180 |
|
|
181 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
235 |
fVerT (i,j,2) = 0. _d 0 |
fVerT (i,j,2) = 0. _d 0 |
236 |
fVerS (i,j,1) = 0. _d 0 |
fVerS (i,j,1) = 0. _d 0 |
237 |
fVerS (i,j,2) = 0. _d 0 |
fVerS (i,j,2) = 0. _d 0 |
238 |
|
#ifdef ALLOW_PASSIVE_TRACER |
239 |
fVerTr1(i,j,1) = 0. _d 0 |
fVerTr1(i,j,1) = 0. _d 0 |
240 |
fVerTr1(i,j,2) = 0. _d 0 |
fVerTr1(i,j,2) = 0. _d 0 |
241 |
|
#endif |
242 |
|
#ifdef ALLOW_PTRACERS |
243 |
|
DO ip=1,PTRACERS_num |
244 |
|
fVerP (i,j,1,ip) = 0. _d 0 |
245 |
|
fVerP (i,j,2,ip) = 0. _d 0 |
246 |
|
ENDDO |
247 |
|
#endif |
248 |
ENDDO |
ENDDO |
249 |
ENDDO |
ENDDO |
250 |
|
|
258 |
ConvectCount(i,j,k) = 0. |
ConvectCount(i,j,k) = 0. |
259 |
KappaRT(i,j,k) = 0. _d 0 |
KappaRT(i,j,k) = 0. _d 0 |
260 |
KappaRS(i,j,k) = 0. _d 0 |
KappaRS(i,j,k) = 0. _d 0 |
261 |
#ifdef ALLOW_AUTODIFF_TAMC |
C- tracer tendency needs to be set to zero (moved here from gad_calc_rhs): |
|
cph all the following init. are necessary for TAF |
|
|
cph although some of these are re-initialised later. |
|
262 |
gT(i,j,k,bi,bj) = 0. _d 0 |
gT(i,j,k,bi,bj) = 0. _d 0 |
263 |
gS(i,j,k,bi,bj) = 0. _d 0 |
gS(i,j,k,bi,bj) = 0. _d 0 |
264 |
# ifdef ALLOW_PASSIVE_TRACER |
# ifdef ALLOW_PASSIVE_TRACER |
265 |
|
ceh3 needs an IF ( use PASSIVE_TRACER) THEN |
266 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
267 |
# endif |
# endif |
268 |
# ifdef ALLOW_PTRACERS |
# ifdef ALLOW_PTRACERS |
269 |
|
ceh3 this should have an IF ( usePTRACERS ) THEN |
270 |
DO iTracer=1,PTRACERS_numInUse |
DO iTracer=1,PTRACERS_numInUse |
271 |
gPTr(i,j,k,bi,bj,itracer) = 0. _d 0 |
gPTr(i,j,k,bi,bj,itracer) = 0. _d 0 |
272 |
ENDDO |
ENDDO |
273 |
# endif |
# endif |
274 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
275 |
|
cph all the following init. are necessary for TAF |
276 |
|
cph although some of these are re-initialised later. |
277 |
# ifdef ALLOW_GMREDI |
# ifdef ALLOW_GMREDI |
278 |
Kwx(i,j,k,bi,bj) = 0. _d 0 |
Kwx(i,j,k,bi,bj) = 0. _d 0 |
279 |
Kwy(i,j,k,bi,bj) = 0. _d 0 |
Kwy(i,j,k,bi,bj) = 0. _d 0 |
315 |
#endif |
#endif |
316 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
317 |
|
|
318 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
319 |
IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid) |
IF ( debugLevel .GE. debLevB ) |
320 |
|
& CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid) |
321 |
#endif |
#endif |
322 |
|
|
323 |
C-- Start of diagnostic loop |
C-- Start of diagnostic loop |
354 |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
355 |
c IF ( k.GT.1 .AND. (useGMRedi.OR.ivdc_kappa.NE.0.) ) THEN |
c IF ( k.GT.1 .AND. (useGMRedi.OR.ivdc_kappa.NE.0.) ) THEN |
356 |
IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.) ) THEN |
IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.) ) THEN |
357 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
358 |
IF (debugMode) CALL DEBUG_CALL('FIND_RHO',myThid) |
IF ( debugLevel .GE. debLevB ) |
359 |
|
& CALL DEBUG_CALL('FIND_RHO',myThid) |
360 |
#endif |
#endif |
361 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
362 |
CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
379 |
O rhoKm1, |
O rhoKm1, |
380 |
I myThid ) |
I myThid ) |
381 |
ENDIF |
ENDIF |
382 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
383 |
IF (debugMode) CALL DEBUG_CALL('GRAD_SIGMA',myThid) |
IF ( debugLevel .GE. debLevB ) |
384 |
|
& CALL DEBUG_CALL('GRAD_SIGMA',myThid) |
385 |
#endif |
#endif |
386 |
CALL GRAD_SIGMA( |
CALL GRAD_SIGMA( |
387 |
I bi, bj, iMin, iMax, jMin, jMax, k, |
I bi, bj, iMin, iMax, jMin, jMax, k, |
397 |
C-- Implicit Vertical Diffusion for Convection |
C-- Implicit Vertical Diffusion for Convection |
398 |
c ==> should use sigmaR !!! |
c ==> should use sigmaR !!! |
399 |
IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN |
IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN |
400 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
401 |
IF (debugMode) CALL DEBUG_CALL('CALC_IVDC',myThid) |
IF ( debugLevel .GE. debLevB ) |
402 |
|
& CALL DEBUG_CALL('CALC_IVDC',myThid) |
403 |
#endif |
#endif |
404 |
CALL CALC_IVDC( |
CALL CALC_IVDC( |
405 |
I bi, bj, iMin, iMax, jMin, jMax, k, |
I bi, bj, iMin, iMax, jMin, jMax, k, |
421 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
422 |
C-- Calculate future values on open boundaries |
C-- Calculate future values on open boundaries |
423 |
IF (useOBCS) THEN |
IF (useOBCS) THEN |
424 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
425 |
IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid) |
IF ( debugLevel .GE. debLevB ) |
426 |
|
& CALL DEBUG_CALL('OBCS_CALC',myThid) |
427 |
#endif |
#endif |
428 |
CALL OBCS_CALC( bi, bj, myTime+deltaT, myIter+1, |
CALL OBCS_CALC( bi, bj, myTime+deltaT, myIter+1, |
429 |
I uVel, vVel, wVel, theta, salt, |
I uVel, vVel, wVel, theta, salt, |
431 |
ENDIF |
ENDIF |
432 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
433 |
|
|
|
|
|
|
c******************************************** |
|
|
cswdice --- add --- |
|
|
#ifdef ALLOW_THERM_SEAICE |
|
|
#ifndef DISABLE_DEBUGMODE |
|
|
IF (debugMode) CALL DEBUG_CALL('ICE_FORCING',myThid) |
|
|
#endif |
|
|
C-- Determines forcing terms based on external fields |
|
|
c-- including effects from ice |
|
|
CALL ICE_FORCING( |
|
|
I bi, bj, iMin, iMax, jMin, jMax, |
|
|
I myThid ) |
|
|
#else |
|
|
|
|
|
cswdice --- end add --- |
|
|
|
|
434 |
C-- Determines forcing terms based on external fields |
C-- Determines forcing terms based on external fields |
435 |
C relaxation terms, etc. |
C relaxation terms, etc. |
436 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
437 |
IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid) |
IF ( debugLevel .GE. debLevB ) |
438 |
|
& CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid) |
439 |
#endif |
#endif |
440 |
CALL EXTERNAL_FORCING_SURF( |
CALL EXTERNAL_FORCING_SURF( |
441 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
442 |
I myThid ) |
I myTime, myIter, myThid ) |
|
cswdice --- add ---- |
|
|
#endif |
|
|
cswdice --- end add --- |
|
|
c****************************************** |
|
|
|
|
|
|
|
|
|
|
443 |
|
|
444 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
445 |
cph needed for KPP |
cph needed for KPP |
451 |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
452 |
CADJ STORE surfacetendencyT(:,:,bi,bj) |
CADJ STORE surfacetendencyT(:,:,bi,bj) |
453 |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
454 |
|
# ifdef ALLOW_SEAICE |
455 |
|
CADJ STORE surfacetendencyTice(:,:,bi,bj) |
456 |
|
CADJ & = comlev1_bibj, key=itdkey, byte=isbyte |
457 |
|
# endif |
458 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
459 |
|
|
460 |
C-- Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h |
C-- Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h |
474 |
|
|
475 |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
476 |
IF (useGMRedi) THEN |
IF (useGMRedi) THEN |
477 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
478 |
IF (debugMode) CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid) |
IF ( debugLevel .GE. debLevB ) |
479 |
|
& CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid) |
480 |
#endif |
#endif |
481 |
CALL GMREDI_CALC_TENSOR( |
CALL GMREDI_CALC_TENSOR( |
482 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
502 |
#ifdef ALLOW_KPP |
#ifdef ALLOW_KPP |
503 |
C-- Compute KPP mixing coefficients |
C-- Compute KPP mixing coefficients |
504 |
IF (useKPP) THEN |
IF (useKPP) THEN |
505 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
506 |
IF (debugMode) CALL DEBUG_CALL('KPP_CALC',myThid) |
IF ( debugLevel .GE. debLevB ) |
507 |
|
& CALL DEBUG_CALL('KPP_CALC',myThid) |
508 |
#endif |
#endif |
509 |
CALL KPP_CALC( |
CALL KPP_CALC( |
510 |
I bi, bj, myTime, myThid ) |
I bi, bj, myTime, myThid ) |
526 |
#endif /* ALLOW_KPP */ |
#endif /* ALLOW_KPP */ |
527 |
|
|
528 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
|
CADJ STORE KappaRT(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte |
|
|
CADJ STORE KappaRS(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte |
|
529 |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
530 |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
531 |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
543 |
#ifdef ALLOW_AIM |
#ifdef ALLOW_AIM |
544 |
C AIM - atmospheric intermediate model, physics package code. |
C AIM - atmospheric intermediate model, physics package code. |
545 |
IF ( useAIM ) THEN |
IF ( useAIM ) THEN |
546 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
547 |
IF (debugMode) CALL DEBUG_CALL('AIM_DO_PHYSICS',myThid) |
IF ( debugLevel .GE. debLevB ) |
548 |
|
& CALL DEBUG_CALL('AIM_DO_PHYSICS',myThid) |
549 |
#endif |
#endif |
550 |
CALL TIMER_START('AIM_DO_PHYSICS [THERMODYNAMICS]', myThid) |
CALL TIMER_START('AIM_DO_PHYSICS [THERMODYNAMICS]', myThid) |
551 |
CALL AIM_DO_PHYSICS( bi, bj, myTime, myIter, myThid ) |
CALL AIM_DO_PHYSICS( bi, bj, myTime, myIter, myThid ) |
565 |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
566 |
C disable this section of code. |
C disable this section of code. |
567 |
IF (tempMultiDimAdvec) THEN |
IF (tempMultiDimAdvec) THEN |
568 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
569 |
IF (debugMode) CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
IF ( debugLevel .GE. debLevB ) |
570 |
|
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
571 |
#endif |
#endif |
572 |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
573 |
U theta,gT, |
U theta,gT, |
574 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
575 |
ENDIF |
ENDIF |
576 |
IF (saltMultiDimAdvec) THEN |
IF (saltMultiDimAdvec) THEN |
577 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
578 |
IF (debugMode) CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
IF ( debugLevel .GE. debLevB ) |
579 |
|
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
580 |
#endif |
#endif |
581 |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
582 |
U salt,gS, |
U salt,gS, |
587 |
C of whether multiDimAdvection is set or not. |
C of whether multiDimAdvection is set or not. |
588 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
589 |
IF ( usePTRACERS ) THEN |
IF ( usePTRACERS ) THEN |
590 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
591 |
IF (debugMode) CALL DEBUG_CALL('PTRACERS_ADVECTION',myThid) |
IF ( debugLevel .GE. debLevB ) |
592 |
|
& CALL DEBUG_CALL('PTRACERS_ADVECTION',myThid) |
593 |
#endif |
#endif |
594 |
CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid ) |
CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid ) |
595 |
ENDIF |
ENDIF |
596 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
597 |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
598 |
|
|
599 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
600 |
IF (debugMode) CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid) |
IF ( debugLevel .GE. debLevB ) |
601 |
|
& CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid) |
602 |
#endif |
#endif |
603 |
|
|
604 |
C-- Start of thermodynamics loop |
C-- Start of thermodynamics loop |
649 |
|
|
650 |
#endif /* ALLOW_GMREDI */ |
#endif /* ALLOW_GMREDI */ |
651 |
|
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
|
|
CADJ STORE KappaRT(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
|
|
CADJ STORE KappaRS(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
|
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
|
|
|
|
652 |
#ifdef INCLUDE_CALC_DIFFUSIVITY_CALL |
#ifdef INCLUDE_CALC_DIFFUSIVITY_CALL |
653 |
C-- Calculate the total vertical diffusivity |
C-- Calculate the total vertical diffusivity |
654 |
CALL CALC_DIFFUSIVITY( |
CALL CALC_DIFFUSIVITY( |
656 |
I maskUp, |
I maskUp, |
657 |
O KappaRT,KappaRS, |
O KappaRT,KappaRS, |
658 |
I myThid) |
I myThid) |
659 |
|
# ifdef ALLOW_AUTODIFF_TAMC |
660 |
|
CADJ STORE KappaRT(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
661 |
|
CADJ STORE KappaRS(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
662 |
|
# endif /* ALLOW_AUTODIFF_TAMC */ |
663 |
#endif |
#endif |
664 |
|
|
665 |
iMin = 1-OLx+2 |
iMin = 1-OLx+2 |
681 |
I theta, gT, |
I theta, gT, |
682 |
I myIter, myThid) |
I myIter, myThid) |
683 |
ENDIF |
ENDIF |
684 |
cswdice ---- add --- |
|
|
#ifdef ALLOW_THERM_SEAICE |
|
|
if (k.eq.1) then |
|
|
call ICE_FREEZE(bi, bj, iMin, iMax, jMin, jMax, myThid ) |
|
|
endif |
|
|
#endif |
|
|
cswdice -- end add --- |
|
685 |
IF ( saltStepping ) THEN |
IF ( saltStepping ) THEN |
686 |
CALL CALC_GS( |
CALL CALC_GS( |
687 |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
695 |
I myIter, myThid) |
I myIter, myThid) |
696 |
ENDIF |
ENDIF |
697 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
698 |
|
ceh3 needs an IF ( usePASSIVE_TRACER ) THEN |
699 |
IF ( tr1Stepping ) THEN |
IF ( tr1Stepping ) THEN |
700 |
CALL CALC_GTR1( |
CALL CALC_GTR1( |
701 |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
714 |
CALL PTRACERS_INTEGRATE( |
CALL PTRACERS_INTEGRATE( |
715 |
I bi,bj,k, |
I bi,bj,k, |
716 |
I xA,yA,uTrans,vTrans,rTrans,maskUp, |
I xA,yA,uTrans,vTrans,rTrans,maskUp, |
717 |
X KappaRS, |
X fVerP, KappaRS, |
718 |
I myIter,myTime,myThid) |
I myIter,myTime,myThid) |
719 |
ENDIF |
ENDIF |
720 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
727 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
728 |
|
|
729 |
C-- Freeze water |
C-- Freeze water |
730 |
IF ( allowFreezing .AND. .NOT. useSEAICE ) THEN |
C this bit of code is left here for backward compatibility. |
731 |
|
C freezing at surface level has been moved to FORWARD_STEP |
732 |
|
IF ( useOldFreezing .AND. .NOT. useSEAICE |
733 |
|
& .AND. .NOT.(useThSIce.AND.k.EQ.1) ) THEN |
734 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
735 |
CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k |
CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k |
736 |
CADJ & , key = kkey, byte = isbyte |
CADJ & , key = kkey, byte = isbyte |
737 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
738 |
CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid ) |
CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid ) |
739 |
END IF |
ENDIF |
740 |
|
|
741 |
C-- end of thermodynamic k loop (Nr:1) |
C-- end of thermodynamic k loop (Nr:1) |
742 |
ENDDO |
ENDDO |
743 |
|
|
|
cswdice -- add --- |
|
|
#ifdef ALLOW_THERM_SEAICE |
|
|
c timeaveraging for ice model values |
|
|
CALL ICE_AVE(bi,bj,iMin,iMax,jMin,jMax,myThid ) |
|
|
#endif |
|
|
cswdice --- end add --- |
|
|
|
|
|
|
|
|
|
|
744 |
|
|
745 |
C-- Implicit diffusion |
C-- Implicit diffusion |
746 |
IF (implicitDiffusion) THEN |
IF (implicitDiffusion) THEN |
747 |
|
|
748 |
IF (tempStepping) THEN |
IF (tempStepping) THEN |
749 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
750 |
|
CADJ STORE KappaRT(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
751 |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
752 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
753 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
759 |
|
|
760 |
IF (saltStepping) THEN |
IF (saltStepping) THEN |
761 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
762 |
|
CADJ STORE KappaRS(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
763 |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
764 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
765 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
802 |
ENDIF |
ENDIF |
803 |
|
|
804 |
#ifdef ALLOW_TIMEAVE |
#ifdef ALLOW_TIMEAVE |
805 |
|
ceh3 needs an IF ( useTIMEAVE ) THEN |
806 |
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
807 |
CALL TIMEAVE_CUMUL_1T(ConvectCountTave, ConvectCount, |
CALL TIMEAVE_CUMUL_1T(ConvectCountTave, ConvectCount, |
808 |
I Nr, deltaTclock, bi, bj, myThid) |
I Nr, deltaTclock, bi, bj, myThid) |
825 |
ENDDO |
ENDDO |
826 |
ENDDO |
ENDDO |
827 |
|
|
828 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
829 |
If (debugMode) THEN |
If (debugMode) THEN |
830 |
CALL DEBUG_STATS_RL(Nr,uVel,'Uvel (THERMODYNAMICS)',myThid) |
CALL DEBUG_STATS_RL(Nr,uVel,'Uvel (THERMODYNAMICS)',myThid) |
831 |
CALL DEBUG_STATS_RL(Nr,vVel,'Vvel (THERMODYNAMICS)',myThid) |
CALL DEBUG_STATS_RL(Nr,vVel,'Vvel (THERMODYNAMICS)',myThid) |
844 |
ENDIF |
ENDIF |
845 |
#endif |
#endif |
846 |
|
|
847 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
848 |
IF (debugMode) CALL DEBUG_LEAVE('FORWARD_STEP',myThid) |
IF ( debugLevel .GE. debLevB ) |
849 |
|
& CALL DEBUG_LEAVE('FORWARD_STEP',myThid) |
850 |
#endif |
#endif |
851 |
|
|
852 |
RETURN |
RETURN |