162 |
INTEGER k, km1, kup, kDown |
INTEGER k, km1, kup, kDown |
163 |
|
|
164 |
CEOP |
CEOP |
165 |
|
|
166 |
|
#ifndef DISABLE_DEBUGMODE |
167 |
|
IF (debugMode) CALL DEBUG_ENTER('FORWARD_STEP',myThid) |
168 |
|
#endif |
169 |
|
|
170 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
171 |
C-- dummy statement to end declaration part |
C-- dummy statement to end declaration part |
295 |
#endif |
#endif |
296 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
297 |
|
|
298 |
|
#ifndef DISABLE_DEBUGMODE |
299 |
|
IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid) |
300 |
|
#endif |
301 |
|
|
302 |
C-- Start of diagnostic loop |
C-- Start of diagnostic loop |
303 |
DO k=Nr,1,-1 |
DO k=Nr,1,-1 |
304 |
|
|
333 |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
334 |
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 |
335 |
IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.) ) THEN |
IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.) ) THEN |
336 |
|
#ifndef DISABLE_DEBUGMODE |
337 |
|
IF (debugMode) CALL DEBUG_CALL('FIND_RHO',myThid) |
338 |
|
#endif |
339 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
340 |
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 |
341 |
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 |
357 |
O rhoKm1, |
O rhoKm1, |
358 |
I myThid ) |
I myThid ) |
359 |
ENDIF |
ENDIF |
360 |
|
#ifndef DISABLE_DEBUGMODE |
361 |
|
IF (debugMode) CALL DEBUG_CALL('GRAD_SIGMA',myThid) |
362 |
|
#endif |
363 |
CALL GRAD_SIGMA( |
CALL GRAD_SIGMA( |
364 |
I bi, bj, iMin, iMax, jMin, jMax, k, |
I bi, bj, iMin, iMax, jMin, jMax, k, |
365 |
I rhoK, rhoKm1, rhoK, |
I rhoK, rhoKm1, rhoK, |
374 |
C-- Implicit Vertical Diffusion for Convection |
C-- Implicit Vertical Diffusion for Convection |
375 |
c ==> should use sigmaR !!! |
c ==> should use sigmaR !!! |
376 |
IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN |
IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN |
377 |
|
#ifndef DISABLE_DEBUGMODE |
378 |
|
IF (debugMode) CALL DEBUG_CALL('CALC_IVDC',myThid) |
379 |
|
#endif |
380 |
CALL CALC_IVDC( |
CALL CALC_IVDC( |
381 |
I bi, bj, iMin, iMax, jMin, jMax, k, |
I bi, bj, iMin, iMax, jMin, jMax, k, |
382 |
I rhoKm1, rhoK, |
I rhoKm1, rhoK, |
397 |
#ifdef ALLOW_OBCS |
#ifdef ALLOW_OBCS |
398 |
C-- Calculate future values on open boundaries |
C-- Calculate future values on open boundaries |
399 |
IF (useOBCS) THEN |
IF (useOBCS) THEN |
400 |
|
#ifndef DISABLE_DEBUGMODE |
401 |
|
IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid) |
402 |
|
#endif |
403 |
CALL OBCS_CALC( bi, bj, myTime+deltaT, myIter+1, |
CALL OBCS_CALC( bi, bj, myTime+deltaT, myIter+1, |
404 |
I uVel, vVel, wVel, theta, salt, |
I uVel, vVel, wVel, theta, salt, |
405 |
I myThid ) |
I myThid ) |
410 |
c******************************************** |
c******************************************** |
411 |
cswdice --- add --- |
cswdice --- add --- |
412 |
#ifdef ALLOW_THERM_SEAICE |
#ifdef ALLOW_THERM_SEAICE |
413 |
|
#ifndef DISABLE_DEBUGMODE |
414 |
|
IF (debugMode) CALL DEBUG_CALL('ICE_FORCING',myThid) |
415 |
|
#endif |
416 |
C-- Determines forcing terms based on external fields |
C-- Determines forcing terms based on external fields |
417 |
c-- including effects from ice |
c-- including effects from ice |
418 |
CALL ICE_FORCING( |
CALL ICE_FORCING( |
424 |
|
|
425 |
C-- Determines forcing terms based on external fields |
C-- Determines forcing terms based on external fields |
426 |
C relaxation terms, etc. |
C relaxation terms, etc. |
427 |
|
#ifndef DISABLE_DEBUGMODE |
428 |
|
IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid) |
429 |
|
#endif |
430 |
CALL EXTERNAL_FORCING_SURF( |
CALL EXTERNAL_FORCING_SURF( |
431 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
432 |
I myThid ) |
I myThid ) |
467 |
|
|
468 |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
C-- Calculate iso-neutral slopes for the GM/Redi parameterisation |
469 |
IF (useGMRedi) THEN |
IF (useGMRedi) THEN |
470 |
|
#ifndef DISABLE_DEBUGMODE |
471 |
|
IF (debugMode) CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid) |
472 |
|
#endif |
473 |
CALL GMREDI_CALC_TENSOR( |
CALL GMREDI_CALC_TENSOR( |
474 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
475 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
494 |
#ifdef ALLOW_KPP |
#ifdef ALLOW_KPP |
495 |
C-- Compute KPP mixing coefficients |
C-- Compute KPP mixing coefficients |
496 |
IF (useKPP) THEN |
IF (useKPP) THEN |
497 |
|
#ifndef DISABLE_DEBUGMODE |
498 |
|
IF (debugMode) CALL DEBUG_CALL('KPP_CALC',myThid) |
499 |
|
#endif |
500 |
CALL KPP_CALC( |
CALL KPP_CALC( |
501 |
I bi, bj, myTime, myThid ) |
I bi, bj, myTime, myThid ) |
502 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
531 |
#ifdef ALLOW_AIM |
#ifdef ALLOW_AIM |
532 |
C AIM - atmospheric intermediate model, physics package code. |
C AIM - atmospheric intermediate model, physics package code. |
533 |
IF ( useAIM ) THEN |
IF ( useAIM ) THEN |
534 |
|
#ifndef DISABLE_DEBUGMODE |
535 |
|
IF (debugMode) CALL DEBUG_CALL('AIM_DO_PHYSICS',myThid) |
536 |
|
#endif |
537 |
CALL TIMER_START('AIM_DO_PHYSICS [THERMODYNAMICS]', myThid) |
CALL TIMER_START('AIM_DO_PHYSICS [THERMODYNAMICS]', myThid) |
538 |
CALL AIM_DO_PHYSICS( bi, bj, myTime, myIter, myThid ) |
CALL AIM_DO_PHYSICS( bi, bj, myTime, myIter, myThid ) |
539 |
CALL TIMER_STOP( 'AIM_DO_PHYSICS [THERMODYNAMICS]', myThid) |
CALL TIMER_STOP( 'AIM_DO_PHYSICS [THERMODYNAMICS]', myThid) |
552 |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
553 |
C disable this section of code. |
C disable this section of code. |
554 |
IF (tempMultiDimAdvec) THEN |
IF (tempMultiDimAdvec) THEN |
555 |
|
#ifndef DISABLE_DEBUGMODE |
556 |
|
IF (debugMode) CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
557 |
|
#endif |
558 |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE, |
559 |
U theta,gT, |
U theta,gT, |
560 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
561 |
ENDIF |
ENDIF |
562 |
IF (saltMultiDimAdvec) THEN |
IF (saltMultiDimAdvec) THEN |
563 |
|
#ifndef DISABLE_DEBUGMODE |
564 |
|
IF (debugMode) CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
565 |
|
#endif |
566 |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY, |
567 |
U salt,gS, |
U salt,gS, |
568 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
572 |
C of whether multiDimAdvection is set or not. |
C of whether multiDimAdvection is set or not. |
573 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
574 |
IF ( usePTRACERS ) THEN |
IF ( usePTRACERS ) THEN |
575 |
|
#ifndef DISABLE_DEBUGMODE |
576 |
|
IF (debugMode) CALL DEBUG_CALL('PTRACERS_ADVECTION',myThid) |
577 |
|
#endif |
578 |
CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid ) |
CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid ) |
579 |
ENDIF |
ENDIF |
580 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
581 |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
582 |
|
|
583 |
|
#ifndef DISABLE_DEBUGMODE |
584 |
|
IF (debugMode) CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid) |
585 |
|
#endif |
586 |
|
|
587 |
C-- Start of thermodynamics loop |
C-- Start of thermodynamics loop |
588 |
DO k=Nr,1,-1 |
DO k=Nr,1,-1 |
589 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
836 |
ENDIF |
ENDIF |
837 |
#endif |
#endif |
838 |
|
|
839 |
|
#ifndef DISABLE_DEBUGMODE |
840 |
|
IF (debugMode) CALL DEBUG_LEAVE('FORWARD_STEP',myThid) |
841 |
|
#endif |
842 |
|
|
843 |
RETURN |
RETURN |
844 |
END |
END |