129 |
C is "pipelined" in the vertical |
C is "pipelined" in the vertical |
130 |
C so we need an fVer for each |
C so we need an fVer for each |
131 |
C variable. |
C variable. |
132 |
C KappaRT, - Total diffusion in vertical for T and S. |
C kappaRT, - Total diffusion in vertical at level k, for T and S |
133 |
C KappaRS (background + spatially varying, isopycnal term). |
C kappaRS (background + spatially varying, isopycnal term). |
134 |
|
C kappaRTr - Total diffusion in vertical at level k, |
135 |
|
C for each passive Tracer |
136 |
|
C kappaRk - Total diffusion in vertical, all levels, 1 tracer |
137 |
C useVariableK = T when vertical diffusion is not constant |
C useVariableK = T when vertical diffusion is not constant |
138 |
C iMin, iMax - Ranges and sub-block indices on which calculations |
C iMin, iMax - Ranges and sub-block indices on which calculations |
139 |
C jMin, jMax are applied. |
C jMin, jMax are applied. |
150 |
_RS maskUp (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RS maskUp (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
151 |
_RL fVerT (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
_RL fVerT (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
152 |
_RL fVerS (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
_RL fVerS (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2) |
153 |
|
_RL kappaRT (1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
154 |
|
_RL kappaRS (1-Olx:sNx+Olx,1-Oly:sNy+Oly) |
155 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
156 |
_RL fVerP (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num) |
_RL fVerP (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num) |
157 |
|
_RL kappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,PTRACERS_num) |
158 |
#endif |
#endif |
159 |
_RL KappaRT (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
_RL kappaRk (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
|
_RL KappaRS (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) |
|
160 |
_RL sigmaX (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL sigmaX (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
161 |
_RL sigmaY (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL sigmaY (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
162 |
_RL sigmaR (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
_RL sigmaR (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) |
193 |
C-- HPF directive to help TAMC |
C-- HPF directive to help TAMC |
194 |
CHPF$ INDEPENDENT, NEW (rTrans,fVerT,fVerS |
CHPF$ INDEPENDENT, NEW (rTrans,fVerT,fVerS |
195 |
CHPF$& ,utrans,vtrans,xA,yA |
CHPF$& ,utrans,vtrans,xA,yA |
196 |
CHPF$& ,KappaRT,KappaRS |
CHPF$& ,kappaRT,kappaRS |
197 |
CHPF$& ) |
CHPF$& ) |
198 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
199 |
|
|
230 |
fVerT (i,j,2) = 0. _d 0 |
fVerT (i,j,2) = 0. _d 0 |
231 |
fVerS (i,j,1) = 0. _d 0 |
fVerS (i,j,1) = 0. _d 0 |
232 |
fVerS (i,j,2) = 0. _d 0 |
fVerS (i,j,2) = 0. _d 0 |
233 |
|
kappaRT(i,j) = 0. _d 0 |
234 |
|
kappaRS(i,j) = 0. _d 0 |
235 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
236 |
DO ip=1,PTRACERS_num |
DO ip=1,PTRACERS_num |
237 |
fVerP (i,j,1,ip) = 0. _d 0 |
fVerP (i,j,1,ip) = 0. _d 0 |
238 |
fVerP (i,j,2,ip) = 0. _d 0 |
fVerP (i,j,2,ip) = 0. _d 0 |
239 |
|
kappaRTr(i,j,ip) = 0. _d 0 |
240 |
ENDDO |
ENDDO |
241 |
#endif |
#endif |
242 |
ENDDO |
ENDDO |
246 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
247 |
DO i=1-OLx,sNx+OLx |
DO i=1-OLx,sNx+OLx |
248 |
C This is currently also used by IVDC and Diagnostics |
C This is currently also used by IVDC and Diagnostics |
249 |
KappaRT(i,j,k) = 0. _d 0 |
kappaRk(i,j,k) = 0. _d 0 |
|
KappaRS(i,j,k) = 0. _d 0 |
|
250 |
C- tracer tendency needs to be set to zero (moved here from gad_calc_rhs): |
C- tracer tendency needs to be set to zero (moved here from gad_calc_rhs): |
251 |
gT(i,j,k,bi,bj) = 0. _d 0 |
gT(i,j,k,bi,bj) = 0. _d 0 |
252 |
gS(i,j,k,bi,bj) = 0. _d 0 |
gS(i,j,k,bi,bj) = 0. _d 0 |
253 |
# ifdef ALLOW_PTRACERS |
# ifdef ALLOW_PTRACERS |
|
ceh3 this should have an IF ( usePTRACERS ) THEN |
|
254 |
DO iTracer=1,PTRACERS_numInUse |
DO iTracer=1,PTRACERS_numInUse |
255 |
gPTr(i,j,k,bi,bj,itracer) = 0. _d 0 |
gPTr(i,j,k,bi,bj,itracer) = 0. _d 0 |
256 |
ENDDO |
ENDDO |
348 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
349 |
C? Patrick Is this formula correct? |
C? Patrick Is this formula correct? |
350 |
cph Yes, but I rewrote it. |
cph Yes, but I rewrote it. |
351 |
cph Also, the KappaR? need the index and subscript k! |
cph Also, the kappaR? need the index and subscript k! |
352 |
kkey = (itdkey-1)*Nr + k |
kkey = (itdkey-1)*Nr + k |
353 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
354 |
|
|
420 |
|
|
421 |
#ifdef INCLUDE_CALC_DIFFUSIVITY_CALL |
#ifdef INCLUDE_CALC_DIFFUSIVITY_CALL |
422 |
C-- Calculate the total vertical diffusivity |
C-- Calculate the total vertical diffusivity |
423 |
CALL CALC_DIFFUSIVITY( |
IF ( .NOT.implicitDiffusion ) THEN |
424 |
I bi,bj,iMin,iMax,jMin,jMax,k, |
CALL CALC_DIFFUSIVITY( |
425 |
I maskUp, |
I bi,bj,iMin,iMax,jMin,jMax,k, |
426 |
O KappaRT,KappaRS, |
I maskUp, |
427 |
I myThid) |
O kappaRT,kappaRS, |
428 |
|
I myThid) |
429 |
|
ENDIF |
430 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
431 |
CADJ STORE KappaRT(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE kappaRT(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
432 |
CADJ STORE KappaRS(:,:,k) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE kappaRS(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
433 |
# endif /* ALLOW_AUTODIFF_TAMC */ |
# endif /* ALLOW_AUTODIFF_TAMC */ |
434 |
#endif |
#endif |
435 |
|
|
445 |
CALL CALC_GT( |
CALL CALC_GT( |
446 |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
447 |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
448 |
I KappaRT(1-Olx,1-Oly,k), |
I kappaRT, |
449 |
U fVerT, |
U fVerT, |
450 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
451 |
CALL TIMESTEP_TRACER( |
CALL TIMESTEP_TRACER( |
460 |
CALL CALC_GS( |
CALL CALC_GS( |
461 |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
I bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown, |
462 |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
463 |
I KappaRS(1-Olx,1-Oly,k), |
I kappaRS, |
464 |
U fVerS, |
U fVerS, |
465 |
I myTime,myIter,myThid) |
I myTime,myIter,myThid) |
466 |
CALL TIMESTEP_TRACER( |
CALL TIMESTEP_TRACER( |
471 |
#endif |
#endif |
472 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
473 |
IF ( usePTRACERS ) THEN |
IF ( usePTRACERS ) THEN |
474 |
|
IF ( .NOT.implicitDiffusion ) THEN |
475 |
|
CALL PTRACERS_CALC_DIFF( |
476 |
|
I bi,bj,iMin,iMax,jMin,jMax,k, |
477 |
|
I maskUp, |
478 |
|
O kappaRTr, |
479 |
|
I myThid) |
480 |
|
ENDIF |
481 |
CALL PTRACERS_INTEGRATE( |
CALL PTRACERS_INTEGRATE( |
482 |
I bi,bj,k, |
I bi,bj,k, |
483 |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, |
484 |
U fVerP, |
U fVerP, |
485 |
I KappaRS(1-Olx,1-Oly,k), |
I kappaRTr, |
486 |
I myIter,myTime,myThid) |
I myIter,myTime,myThid) |
487 |
ENDIF |
ENDIF |
488 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
511 |
C-- end of thermodynamic k loop (Nr:1) |
C-- end of thermodynamic k loop (Nr:1) |
512 |
ENDDO |
ENDDO |
513 |
|
|
514 |
|
iMin = 1 |
515 |
|
iMax = sNx |
516 |
|
jMin = 1 |
517 |
|
jMax = sNy |
518 |
|
|
519 |
C-- Implicit vertical advection & diffusion |
C-- Implicit vertical advection & diffusion |
520 |
#ifndef ALLOW_OFFLINE |
#ifndef ALLOW_OFFLINE |
521 |
|
IF ( tempStepping .AND. implicitDiffusion ) THEN |
522 |
|
CALL CALC_3D_DIFFUSIVITY( |
523 |
|
I bi,bj,iMin,iMax,jMin,jMax, |
524 |
|
I GAD_TEMPERATURE, useGMredi, useKPP, |
525 |
|
O kappaRk, |
526 |
|
I myThid) |
527 |
|
ENDIF |
528 |
#ifdef INCLUDE_IMPLVERTADV_CODE |
#ifdef INCLUDE_IMPLVERTADV_CODE |
529 |
IF ( tempImplVertAdv ) THEN |
IF ( tempImplVertAdv ) THEN |
530 |
CALL GAD_IMPLICIT_R( |
CALL GAD_IMPLICIT_R( |
531 |
I tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE, |
I tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE, |
532 |
I kappaRT, wVel, theta, |
I kappaRk, wVel, theta, |
533 |
U gT, |
U gT, |
534 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
535 |
ELSEIF ( tempStepping .AND. implicitDiffusion ) THEN |
ELSEIF ( tempStepping .AND. implicitDiffusion ) THEN |
537 |
IF ( tempStepping .AND. implicitDiffusion ) THEN |
IF ( tempStepping .AND. implicitDiffusion ) THEN |
538 |
#endif /* INCLUDE_IMPLVERTADV_CODE */ |
#endif /* INCLUDE_IMPLVERTADV_CODE */ |
539 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
540 |
CADJ STORE KappaRT(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
541 |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
542 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
543 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
544 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
545 |
I deltaTtracer, KappaRT, recip_HFacC, |
I deltaTtracer, kappaRk, recip_HFacC, |
546 |
U gT, |
U gT, |
547 |
I myThid ) |
I myThid ) |
548 |
ENDIF |
ENDIF |
549 |
#endif |
#endif /* ndef ALLOW_OFFLINE */ |
550 |
|
|
551 |
|
#ifdef ALLOW_TIMEAVE |
552 |
|
#ifndef HRCUBE |
553 |
|
useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90 |
554 |
|
& .OR. useGMredi .OR. ivdc_kappa.NE.0. |
555 |
|
IF (taveFreq.GT.0. .AND. useVariableK ) THEN |
556 |
|
IF (implicitDiffusion) THEN |
557 |
|
CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, gT, kappaRk, |
558 |
|
I Nr, 3, deltaTclock, bi, bj, myThid) |
559 |
|
c ELSE |
560 |
|
c CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, theta, kappaRT, |
561 |
|
c I Nr, 3, deltaTclock, bi, bj, myThid) |
562 |
|
ENDIF |
563 |
|
ENDIF |
564 |
|
#endif /* ndef HRCUBE */ |
565 |
|
#endif /* ALLOW_TIMEAVE */ |
566 |
|
|
567 |
#ifndef ALLOW_OFFLINE |
#ifndef ALLOW_OFFLINE |
568 |
|
IF ( saltStepping .AND. implicitDiffusion ) THEN |
569 |
|
CALL CALC_3D_DIFFUSIVITY( |
570 |
|
I bi,bj,iMin,iMax,jMin,jMax, |
571 |
|
I GAD_SALINITY, useGMredi, useKPP, |
572 |
|
O kappaRk, |
573 |
|
I myThid) |
574 |
|
ENDIF |
575 |
|
|
576 |
#ifdef INCLUDE_IMPLVERTADV_CODE |
#ifdef INCLUDE_IMPLVERTADV_CODE |
577 |
IF ( saltImplVertAdv ) THEN |
IF ( saltImplVertAdv ) THEN |
578 |
CALL GAD_IMPLICIT_R( |
CALL GAD_IMPLICIT_R( |
579 |
I saltImplVertAdv, saltAdvScheme, GAD_SALINITY, |
I saltImplVertAdv, saltAdvScheme, GAD_SALINITY, |
580 |
I kappaRS, wVel, salt, |
I kappaRk, wVel, salt, |
581 |
U gS, |
U gS, |
582 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
583 |
ELSEIF ( saltStepping .AND. implicitDiffusion ) THEN |
ELSEIF ( saltStepping .AND. implicitDiffusion ) THEN |
585 |
IF ( saltStepping .AND. implicitDiffusion ) THEN |
IF ( saltStepping .AND. implicitDiffusion ) THEN |
586 |
#endif /* INCLUDE_IMPLVERTADV_CODE */ |
#endif /* INCLUDE_IMPLVERTADV_CODE */ |
587 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
588 |
CADJ STORE KappaRS(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte |
589 |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte |
590 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
591 |
CALL IMPLDIFF( |
CALL IMPLDIFF( |
592 |
I bi, bj, iMin, iMax, jMin, jMax, |
I bi, bj, iMin, iMax, jMin, jMax, |
593 |
I deltaTtracer, KappaRS, recip_HFacC, |
I deltaTtracer, kappaRk, recip_HFacC, |
594 |
U gS, |
U gS, |
595 |
I myThid ) |
I myThid ) |
596 |
ENDIF |
ENDIF |
597 |
#endif |
#endif |
598 |
|
|
599 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
|
c #ifdef INCLUDE_IMPLVERTADV_CODE |
|
|
c IF ( usePTRACERS .AND. ptracerImplVertAdv ) THEN |
|
|
c ELSEIF ( usePTRACERS .AND. implicitDiffusion ) THEN |
|
|
c #else |
|
600 |
IF ( usePTRACERS .AND. implicitDiffusion ) THEN |
IF ( usePTRACERS .AND. implicitDiffusion ) THEN |
601 |
C-- Vertical diffusion (implicit) for passive tracers |
C-- Vertical diffusion (implicit) for passive tracers |
602 |
CALL PTRACERS_IMPLDIFF( bi,bj,KappaRS,myThid ) |
CALL PTRACERS_IMPLDIFF( bi,bj,kappaRk,myThid ) |
603 |
ENDIF |
ENDIF |
604 |
#endif /* ALLOW_PTRACERS */ |
#endif /* ALLOW_PTRACERS */ |
605 |
|
|
624 |
CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount, |
CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount, |
625 |
I Nr, deltaTclock, bi, bj, myThid) |
I Nr, deltaTclock, bi, bj, myThid) |
626 |
ENDIF |
ENDIF |
|
useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90 |
|
|
& .OR. useGMredi .OR. ivdc_kappa.NE.0. |
|
|
IF (taveFreq.GT.0. .AND. useVariableK ) THEN |
|
|
IF (implicitDiffusion) THEN |
|
|
CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, gT, kappaRT, |
|
|
I Nr, 3, deltaTclock, bi, bj, myThid) |
|
|
ELSE |
|
|
CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, theta, kappaRT, |
|
|
I Nr, 3, deltaTclock, bi, bj, myThid) |
|
|
ENDIF |
|
|
ENDIF |
|
627 |
#endif /* ndef HRCUBE */ |
#endif /* ndef HRCUBE */ |
628 |
#endif /* ALLOW_TIMEAVE */ |
#endif /* ALLOW_TIMEAVE */ |
629 |
|
|