2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
5 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
6 |
|
# ifdef ALLOW_GMREDI |
7 |
|
# include "GMREDI_OPTIONS.h" |
8 |
|
# endif |
9 |
|
# ifdef ALLOW_KPP |
10 |
|
# include "KPP_OPTIONS.h" |
11 |
|
# endif |
12 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
13 |
|
|
14 |
CBOP |
CBOP |
15 |
C !ROUTINE: THERMODYNAMICS |
C !ROUTINE: THERMODYNAMICS |
159 |
INTEGER i, j |
INTEGER i, j |
160 |
INTEGER k, km1, kup, kDown |
INTEGER k, km1, kup, kDown |
161 |
|
|
|
Cjmc : add for phiHyd output <- but not working if multi tile per CPU |
|
|
c CHARACTER*(MAX_LEN_MBUF) suff |
|
|
c LOGICAL DIFFERENT_MULTIPLE |
|
|
c EXTERNAL DIFFERENT_MULTIPLE |
|
|
Cjmc(end) |
|
162 |
CEOP |
CEOP |
163 |
|
|
164 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
177 |
yA(i,j) = 0. _d 0 |
yA(i,j) = 0. _d 0 |
178 |
uTrans(i,j) = 0. _d 0 |
uTrans(i,j) = 0. _d 0 |
179 |
vTrans(i,j) = 0. _d 0 |
vTrans(i,j) = 0. _d 0 |
|
DO k=1,Nr |
|
|
phiHyd(i,j,k) = 0. _d 0 |
|
|
sigmaX(i,j,k) = 0. _d 0 |
|
|
sigmaY(i,j,k) = 0. _d 0 |
|
|
sigmaR(i,j,k) = 0. _d 0 |
|
|
ENDDO |
|
|
rhoKM1 (i,j) = 0. _d 0 |
|
180 |
rhok (i,j) = 0. _d 0 |
rhok (i,j) = 0. _d 0 |
181 |
phiSurfX(i,j) = 0. _d 0 |
phiSurfX(i,j) = 0. _d 0 |
182 |
phiSurfY(i,j) = 0. _d 0 |
phiSurfY(i,j) = 0. _d 0 |
224 |
fVerS (i,j,2) = 0. _d 0 |
fVerS (i,j,2) = 0. _d 0 |
225 |
fVerTr1(i,j,1) = 0. _d 0 |
fVerTr1(i,j,1) = 0. _d 0 |
226 |
fVerTr1(i,j,2) = 0. _d 0 |
fVerTr1(i,j,2) = 0. _d 0 |
227 |
|
rhoKM1 (i,j) = 0. _d 0 |
228 |
ENDDO |
ENDDO |
229 |
ENDDO |
ENDDO |
230 |
|
|
232 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
233 |
DO i=1-OLx,sNx+OLx |
DO i=1-OLx,sNx+OLx |
234 |
C This is currently also used by IVDC and Diagnostics |
C This is currently also used by IVDC and Diagnostics |
235 |
|
phiHyd(i,j,k) = 0. _d 0 |
236 |
|
sigmaX(i,j,k) = 0. _d 0 |
237 |
|
sigmaY(i,j,k) = 0. _d 0 |
238 |
|
sigmaR(i,j,k) = 0. _d 0 |
239 |
ConvectCount(i,j,k) = 0. |
ConvectCount(i,j,k) = 0. |
240 |
KappaRT(i,j,k) = 0. _d 0 |
KappaRT(i,j,k) = 0. _d 0 |
241 |
KappaRS(i,j,k) = 0. _d 0 |
KappaRS(i,j,k) = 0. _d 0 |
245 |
#ifdef ALLOW_PASSIVE_TRACER |
#ifdef ALLOW_PASSIVE_TRACER |
246 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
gTr1(i,j,k,bi,bj) = 0. _d 0 |
247 |
#endif |
#endif |
248 |
|
#ifdef ALLOW_GMREDI |
249 |
|
Kwx(i,j,k,bi,bj) = 0. _d 0 |
250 |
|
Kwy(i,j,k,bi,bj) = 0. _d 0 |
251 |
|
Kwz(i,j,k,bi,bj) = 0. _d 0 |
252 |
|
#ifdef GM_NON_UNITY_DIAGONAL |
253 |
|
Kux(i,j,k,bi,bj) = 0. _d 0 |
254 |
|
Kvy(i,j,k,bi,bj) = 0. _d 0 |
255 |
|
#endif |
256 |
|
#endif /* ALLOW_GMREDI */ |
257 |
#endif |
#endif |
258 |
ENDDO |
ENDDO |
259 |
ENDDO |
ENDDO |
260 |
ENDDO |
ENDDO |
261 |
|
|
262 |
iMin = 1-OLx+1 |
iMin = 1-OLx |
263 |
iMax = sNx+OLx |
iMax = sNx+OLx |
264 |
jMin = 1-OLy+1 |
jMin = 1-OLy |
265 |
jMax = sNy+OLy |
jMax = sNy+OLy |
266 |
|
|
267 |
|
|
288 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
289 |
|
|
290 |
C-- Integrate continuity vertically for vertical velocity |
C-- Integrate continuity vertically for vertical velocity |
291 |
CALL INTEGRATE_FOR_W( |
c CALL INTEGRATE_FOR_W( |
292 |
I bi, bj, k, uVel, vVel, |
c I bi, bj, k, uVel, vVel, |
293 |
O wVel, |
c O wVel, |
294 |
I myThid ) |
c I myThid ) |
295 |
|
|
296 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
297 |
#ifdef ALLOW_NONHYDROSTATIC |
#ifdef ALLOW_NONHYDROSTATIC |
298 |
C-- Apply OBC to W if in N-H mode |
C-- Apply OBC to W if in N-H mode |
299 |
IF (useOBCS.AND.nonHydrostatic) THEN |
c IF (useOBCS.AND.nonHydrostatic) THEN |
300 |
CALL OBCS_APPLY_W( bi, bj, k, wVel, myThid ) |
c CALL OBCS_APPLY_W( bi, bj, k, wVel, myThid ) |
301 |
ENDIF |
c ENDIF |
302 |
#endif /* ALLOW_NONHYDROSTATIC */ |
#endif /* ALLOW_NONHYDROSTATIC */ |
303 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
304 |
|
|
305 |
|
C-- Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h |
306 |
|
C-- MOST of THERMODYNAMICS will be disabled |
307 |
|
#ifndef SINGLE_LAYER_MODE |
308 |
|
|
309 |
C-- Calculate gradients of potential density for isoneutral |
C-- Calculate gradients of potential density for isoneutral |
310 |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
311 |
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 |
315 |
CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
316 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
317 |
CALL FIND_RHO( |
CALL FIND_RHO( |
318 |
I bi, bj, iMin, iMax, jMin, jMax, k, k, eosType, |
I bi, bj, iMin, iMax, jMin, jMax, k, k, |
319 |
I theta, salt, |
I theta, salt, |
320 |
O rhoK, |
O rhoK, |
321 |
I myThid ) |
I myThid ) |
325 |
CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
326 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
327 |
CALL FIND_RHO( |
CALL FIND_RHO( |
328 |
I bi, bj, iMin, iMax, jMin, jMax, k-1, k, eosType, |
I bi, bj, iMin, iMax, jMin, jMax, k-1, k, |
329 |
I theta, salt, |
I theta, salt, |
330 |
O rhoKm1, |
O rhoKm1, |
331 |
I myThid ) |
I myThid ) |
347 |
I myTime, myIter, myThid) |
I myTime, myIter, myThid) |
348 |
ENDIF |
ENDIF |
349 |
|
|
350 |
|
#endif /* SINGLE_LAYER_MODE */ |
351 |
|
|
352 |
C-- end of diagnostic k loop (Nr:1) |
C-- end of diagnostic k loop (Nr:1) |
353 |
ENDDO |
ENDDO |
354 |
|
|
360 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
361 |
C-- Calculate future values on open boundaries |
C-- Calculate future values on open boundaries |
362 |
IF (useOBCS) THEN |
IF (useOBCS) THEN |
363 |
CALL OBCS_CALC( bi, bj, myTime+deltaT, |
CALL OBCS_CALC( bi, bj, myTime+deltaT, myIter+1, |
364 |
I uVel, vVel, wVel, theta, salt, |
I uVel, vVel, wVel, theta, salt, |
365 |
I myThid ) |
I myThid ) |
366 |
ENDIF |
ENDIF |
383 |
CADJ & = comlev1_bibj, key=ikey, byte=isbyte |
CADJ & = comlev1_bibj, key=ikey, byte=isbyte |
384 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
385 |
|
|
386 |
|
C-- Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h |
387 |
|
C-- MOST of THERMODYNAMICS will be disabled |
388 |
|
#ifndef SINGLE_LAYER_MODE |
389 |
|
|
390 |
#ifdef ALLOW_GMREDI |
#ifdef ALLOW_GMREDI |
391 |
|
|
392 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
393 |
CADJ STORE sigmaX(:,:,:) = comlev1, key=ikey, byte=isbyte |
CADJ STORE sigmaX(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
394 |
CADJ STORE sigmaY(:,:,:) = comlev1, key=ikey, byte=isbyte |
CADJ STORE sigmaY(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
395 |
CADJ STORE sigmaR(:,:,:) = comlev1, key=ikey, byte=isbyte |
CADJ STORE sigmaR(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
396 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
397 |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
398 |
IF (useGMRedi) THEN |
IF (useGMRedi) THEN |
399 |
DO k=1,Nr |
CALL GMREDI_CALC_TENSOR( |
400 |
CALL GMREDI_CALC_TENSOR( |
I bi, bj, iMin, iMax, jMin, jMax, |
|
I bi, bj, iMin, iMax, jMin, jMax, k, |
|
401 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
402 |
I myThid ) |
I myThid ) |
|
ENDDO |
|
403 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
404 |
ELSE |
ELSE |
405 |
DO k=1, Nr |
CALL GMREDI_CALC_TENSOR_DUMMY( |
406 |
CALL GMREDI_CALC_TENSOR_DUMMY( |
I bi, bj, iMin, iMax, jMin, jMax, |
|
I bi, bj, iMin, iMax, jMin, jMax, k, |
|
407 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
408 |
I myThid ) |
I myThid ) |
|
ENDDO |
|
409 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
410 |
ENDIF |
ENDIF |
411 |
|
|
456 |
C note(jmc) : phiHyd=0 at this point but is not really used in Molteni Physics |
C note(jmc) : phiHyd=0 at this point but is not really used in Molteni Physics |
457 |
IF ( useAIM ) THEN |
IF ( useAIM ) THEN |
458 |
CALL TIMER_START('AIM_DO_ATMOS_PHYS [DYNAMICS]', myThid) |
CALL TIMER_START('AIM_DO_ATMOS_PHYS [DYNAMICS]', myThid) |
459 |
CALL AIM_DO_ATMOS_PHYSICS( phiHyd, bi, bj, myTime, myThid ) |
CALL AIM_DO_ATMOS_PHYSICS( bi, bj, myTime, myThid ) |
460 |
CALL TIMER_STOP ('AIM_DO_ATMOS_PHYS [DYNAMICS]', myThid) |
CALL TIMER_STOP ('AIM_DO_ATMOS_PHYS [DYNAMICS]', myThid) |
461 |
ENDIF |
ENDIF |
462 |
#endif /* ALLOW_AIM */ |
#endif /* ALLOW_AIM */ |
463 |
|
|
464 |
|
#ifdef ALLOW_TIMEAVE |
465 |
|
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
466 |
|
CALL TIMEAVE_CUMULATE(ConvectCountTave, ConvectCount, Nr, |
467 |
|
I deltaTclock, bi, bj, myThid) |
468 |
|
ENDIF |
469 |
|
#endif /* ALLOW_TIMEAVE */ |
470 |
|
|
471 |
|
#ifndef DISABLE_MULTIDIM_ADVECTION |
472 |
C-- Some advection schemes are better calculated using a multi-dimensional |
C-- Some advection schemes are better calculated using a multi-dimensional |
473 |
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. |
474 |
|
C |
475 |
#ifdef ALLOW_MULTIDIM_ADVECTION |
C The CPP flag DISABLE_MULTIDIM_ADVECTION is currently unset in GAD_OPTIONS.h |
476 |
IF (multiDimAdvection) THEN |
C The default is to use multi-dimensinal advection for non-linear advection |
477 |
IF (tempStepping .AND. |
C schemes. However, for the sake of efficiency of the adjoint it is necessary |
478 |
& tempAdvScheme.NE.ENUM_CENTERED_2ND .AND. |
C to be able to exclude this scheme to avoid excessive storage and |
479 |
& tempAdvScheme.NE.ENUM_UPWIND_3RD .AND. |
C recomputation. It *is* differentiable, if you need it. |
480 |
& tempAdvScheme.NE.ENUM_CENTERED_4TH ) THEN |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
481 |
|
C disable this section of code. |
482 |
|
IF (tempMultiDimAdvec) THEN |
483 |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
484 |
U theta,gT, |
U theta,gT, |
485 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
486 |
ENDIF |
ENDIF |
487 |
IF (saltStepping .AND. |
IF (saltMultiDimAdvec) THEN |
|
& saltAdvScheme.NE.ENUM_CENTERED_2ND .AND. |
|
|
& saltAdvScheme.NE.ENUM_UPWIND_3RD .AND. |
|
|
& saltAdvScheme.NE.ENUM_CENTERED_4TH ) THEN |
|
488 |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
489 |
U salt,gS, |
U salt,gS, |
490 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
|
ENDIF |
|
491 |
ENDIF |
ENDIF |
492 |
#endif /* ALLOW_MULTIDIM_ADVECTION */ |
C Since passive tracers are configurable separately from T,S we |
493 |
|
C call the multi-dimensional method for PTRACERS regardless |
494 |
|
C of whether multiDimAdvection is set or not. |
495 |
|
#ifdef ALLOW_PTRACERS |
496 |
|
IF ( usePTRACERS ) THEN |
497 |
|
CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid ) |
498 |
|
ENDIF |
499 |
|
#endif /* ALLOW_PTRACERS */ |
500 |
|
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
501 |
|
|
502 |
C-- Start of thermodynamics loop |
C-- Start of thermodynamics loop |
503 |
DO k=Nr,1,-1 |
DO k=Nr,1,-1 |
527 |
O xA,yA,uTrans,vTrans,rTrans,maskUp, |
O xA,yA,uTrans,vTrans,rTrans,maskUp, |
528 |
I myThid) |
I myThid) |
529 |
|
|
530 |
|
#ifdef ALLOW_GMREDI |
531 |
|
C-- Residual transp = Bolus transp + Eulerian transp |
532 |
|
IF (useGMRedi) THEN |
533 |
|
CALL GMREDI_CALC_UVFLOW( |
534 |
|
& uTrans, vTrans, bi, bj, k, myThid) |
535 |
|
IF (K.GE.2) CALL GMREDI_CALC_WFLOW( |
536 |
|
& rTrans, bi, bj, k, myThid) |
537 |
|
ENDIF |
538 |
|
#endif /* ALLOW_GMREDI */ |
539 |
|
|
540 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
541 |
CADJ STORE KappaRT(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE KappaRT(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
542 |
CADJ STORE KappaRS(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE KappaRS(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
596 |
I myIter,myThid) |
I myIter,myThid) |
597 |
ENDIF |
ENDIF |
598 |
#endif |
#endif |
599 |
|
#ifdef ALLOW_PTRACERS |
600 |
|
IF ( usePTRACERS ) THEN |
601 |
|
CALL PTRACERS_INTEGERATE( |
602 |
|
I bi,bj,k, |
603 |
|
I xA,yA,uTrans,vTrans,rTrans,maskUp, |
604 |
|
X KappaRS, |
605 |
|
I myIter,myTime,myThid) |
606 |
|
ENDIF |
607 |
|
#endif /* ALLOW_PTRACERS */ |
608 |
|
|
609 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
610 |
C-- Apply open boundary conditions |
C-- Apply open boundary conditions |
614 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
615 |
|
|
616 |
C-- Freeze water |
C-- Freeze water |
617 |
IF (allowFreezing) THEN |
IF ( allowFreezing .AND. .NOT. useSEAICE ) THEN |
618 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
619 |
CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k |
CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k |
620 |
CADJ & , key = kkey, byte = isbyte |
CADJ & , key = kkey, byte = isbyte |
625 |
C-- end of thermodynamic k loop (Nr:1) |
C-- end of thermodynamic k loop (Nr:1) |
626 |
ENDDO |
ENDDO |
627 |
|
|
|
|
|
|
#ifdef ALLOW_AUTODIFF_TAMC |
|
|
C? Patrick? What about this one? |
|
|
cph Keys iikey and idkey dont seem to be needed |
|
|
cph since storing occurs on different tape for each |
|
|
cph impldiff call anyways. |
|
|
cph Thus, common block comlev1_impl isnt needed either. |
|
|
cph Storing below needed in the case useGMREDI. |
|
|
iikey = (ikey-1)*maximpl |
|
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
|
|
|
|
628 |
C-- Implicit diffusion |
C-- Implicit diffusion |
629 |
IF (implicitDiffusion) THEN |
IF (implicitDiffusion) THEN |
630 |
|
|
631 |
IF (tempStepping) THEN |
IF (tempStepping) THEN |
632 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
|
idkey = iikey + 1 |
|
633 |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
634 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
635 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
641 |
|
|
642 |
IF (saltStepping) THEN |
IF (saltStepping) THEN |
643 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
|
idkey = iikey + 2 |
|
644 |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte |
645 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
646 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
663 |
ENDIF |
ENDIF |
664 |
#endif |
#endif |
665 |
|
|
666 |
|
#ifdef ALLOW_PTRACERS |
667 |
|
C Vertical diffusion (implicit) for passive tracers |
668 |
|
IF ( usePTRACERS ) THEN |
669 |
|
CALL PTRACERS_IMPLDIFF( bi,bj,KappaRS,myThid ) |
670 |
|
ENDIF |
671 |
|
#endif /* ALLOW_PTRACERS */ |
672 |
|
|
673 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
674 |
C-- Apply open boundary conditions |
C-- Apply open boundary conditions |
675 |
IF (useOBCS) THEN |
IF (useOBCS) THEN |
682 |
C-- End If implicitDiffusion |
C-- End If implicitDiffusion |
683 |
ENDIF |
ENDIF |
684 |
|
|
685 |
|
#endif /* SINGLE_LAYER_MODE */ |
686 |
|
|
687 |
Ccs- |
Ccs- |
688 |
ENDDO |
ENDDO |
689 |
ENDDO |
ENDDO |
690 |
|
|
691 |
#ifdef ALLOW_AIM |
#ifdef ALLOW_AIM |
692 |
IF ( useAIM ) THEN |
c IF ( useAIM ) THEN |
693 |
CALL AIM_AIM2DYN_EXCHANGES( myTime, myThid ) |
c CALL AIM_AIM2DYN_EXCHANGES( myTime, myThid ) |
694 |
ENDIF |
c ENDIF |
|
_EXCH_XYZ_R8(gT,myThid) |
|
|
_EXCH_XYZ_R8(gS,myThid) |
|
|
#else |
|
|
IF (staggerTimeStep.AND.useCubedSphereExchange) THEN |
|
|
_EXCH_XYZ_R8(gT,myThid) |
|
|
_EXCH_XYZ_R8(gS,myThid) |
|
|
ENDIF |
|
695 |
#endif /* ALLOW_AIM */ |
#endif /* ALLOW_AIM */ |
696 |
|
c IF ( staggerTimeStep ) THEN |
697 |
|
c IF ( useAIM .OR. useCubedSphereExchange ) THEN |
698 |
|
c IF (tempStepping) _EXCH_XYZ_R8(gT,myThid) |
699 |
|
c IF (saltStepping) _EXCH_XYZ_R8(gS,myThid) |
700 |
|
c ELSEIF ( useGMRedi .AND. Oly.LT.4 ) THEN |
701 |
|
cc .AND. GM_AdvForm .AND. .NOT.GM_AdvSeparate ) THEN |
702 |
|
c IF (tempMultiDimAdvec) _EXCH_XYZ_R8(gT,myThid) |
703 |
|
c IF (saltMultiDimAdvec) _EXCH_XYZ_R8(gS,myThid) |
704 |
|
c ENDIF |
705 |
|
c ENDIF |
706 |
|
|
707 |
|
#ifndef DISABLE_DEBUGMODE |
708 |
|
If (debugMode) THEN |
709 |
|
CALL DEBUG_STATS_RL(Nr,uVel,'Uvel (THERMODYNAMICS)',myThid) |
710 |
|
CALL DEBUG_STATS_RL(Nr,vVel,'Vvel (THERMODYNAMICS)',myThid) |
711 |
|
CALL DEBUG_STATS_RL(Nr,wVel,'Wvel (THERMODYNAMICS)',myThid) |
712 |
|
CALL DEBUG_STATS_RL(Nr,theta,'Theta (THERMODYNAMICS)',myThid) |
713 |
|
CALL DEBUG_STATS_RL(Nr,salt,'Salt (THERMODYNAMICS)',myThid) |
714 |
|
CALL DEBUG_STATS_RL(Nr,Gt,'Gt (THERMODYNAMICS)',myThid) |
715 |
|
CALL DEBUG_STATS_RL(Nr,Gs,'Gs (THERMODYNAMICS)',myThid) |
716 |
|
CALL DEBUG_STATS_RL(Nr,GtNm1,'GtNm1 (THERMODYNAMICS)',myThid) |
717 |
|
CALL DEBUG_STATS_RL(Nr,GsNm1,'GsNm1 (THERMODYNAMICS)',myThid) |
718 |
|
#ifdef ALLOW_PTRACERS |
719 |
|
IF ( usePTRACERS ) THEN |
720 |
|
CALL PTRACERS_DEBUG(myThid) |
721 |
|
ENDIF |
722 |
|
#endif /* ALLOW_PTRACERS */ |
723 |
|
ENDIF |
724 |
|
#endif |
725 |
|
|
726 |
RETURN |
RETURN |
727 |
END |
END |