17 |
I bi,bj, myTime,myIter,myThid) |
I bi,bj, myTime,myIter,myThid) |
18 |
|
|
19 |
C !DESCRIPTION: |
C !DESCRIPTION: |
20 |
C Calculates the tendancy of a tracer due to advection. |
C Calculates the tendency of a tracer due to advection. |
21 |
C It uses the multi-dimensional method given in \ref{sect:multiDimAdvection} |
C It uses the multi-dimensional method given in \ref{sect:multiDimAdvection} |
22 |
C and can only be used for the non-linear advection schemes such as the |
C and can only be used for the non-linear advection schemes such as the |
23 |
C direct-space-time method and flux-limiters. |
C direct-space-time method and flux-limiters. |
33 |
C \item{$G_\theta = ( \theta^{(n+3/3)} - \theta^{(n)} )/\Delta t$} |
C \item{$G_\theta = ( \theta^{(n+3/3)} - \theta^{(n)} )/\Delta t$} |
34 |
C \end{itemize} |
C \end{itemize} |
35 |
C |
C |
36 |
C The tendancy (output) is over-written by this routine. |
C The tendency (output) is over-written by this routine. |
37 |
|
|
38 |
C !USES: =============================================================== |
C !USES: =============================================================== |
39 |
IMPLICIT NONE |
IMPLICIT NONE |
80 |
INTEGER myThid |
INTEGER myThid |
81 |
|
|
82 |
C !OUTPUT PARAMETERS: ================================================== |
C !OUTPUT PARAMETERS: ================================================== |
83 |
C gTracer :: tendancy array |
C gTracer :: tendency array |
84 |
_RL gTracer(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy) |
_RL gTracer(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy) |
85 |
|
|
86 |
C !LOCAL VARIABLES: ==================================================== |
C !LOCAL VARIABLES: ==================================================== |
270 |
ENDDO |
ENDDO |
271 |
ENDDO |
ENDDO |
272 |
|
|
273 |
#ifndef ALLOW_AUTODIFF_TAMC |
cph-exch2#ifndef ALLOW_AUTODIFF_TAMC |
274 |
IF (useCubedSphereExchange) THEN |
IF (useCubedSphereExchange) THEN |
275 |
withSigns = .FALSE. |
withSigns = .FALSE. |
276 |
CALL FILL_CS_CORNER_UV_RS( |
CALL FILL_CS_CORNER_UV_RS( |
277 |
& withSigns, maskLocW,maskLocS, bi,bj, myThid ) |
& withSigns, maskLocW,maskLocS, bi,bj, myThid ) |
278 |
ENDIF |
ENDIF |
279 |
#endif |
cph-exch2#endif |
280 |
|
|
281 |
C-- Multiple passes for different directions on different tiles |
C-- Multiple passes for different directions on different tiles |
282 |
C-- For cube need one pass for each of red, green and blue axes. |
C-- For cube need one pass for each of red, green and blue axes. |
347 |
C and b) the overlap of myTile are not cube-face Edges |
C and b) the overlap of myTile are not cube-face Edges |
348 |
IF ( .NOT.overlapOnly .OR. N_edge .OR. S_edge ) THEN |
IF ( .NOT.overlapOnly .OR. N_edge .OR. S_edge ) THEN |
349 |
|
|
350 |
#ifndef ALLOW_AUTODIFF_TAMC |
cph-exch2#ifndef ALLOW_AUTODIFF_TAMC |
351 |
C- Internal exchange for calculations in X |
C- Internal exchange for calculations in X |
352 |
#ifdef MULTIDIM_OLD_VERSION |
#ifdef MULTIDIM_OLD_VERSION |
353 |
IF ( useCubedSphereExchange ) THEN |
IF ( useCubedSphereExchange ) THEN |
357 |
#endif |
#endif |
358 |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
359 |
ENDIF |
ENDIF |
360 |
#endif |
cph-exch2#endif |
361 |
|
|
362 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
363 |
# ifndef DISABLE_MULTIDIM_ADVECTION |
# ifndef DISABLE_MULTIDIM_ADVECTION |
368 |
|
|
369 |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
370 |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
371 |
CALL GAD_DST2U1_ADV_X( bi,bj,k, advectionScheme, |
CALL GAD_DST2U1_ADV_X( bi,bj,k, advectionScheme, .TRUE., |
372 |
I dTtracerLev(k),uTrans,uFld,localTij, |
I dTtracerLev(k),uTrans,uFld,localTij, |
373 |
O af, myThid ) |
O af, myThid ) |
374 |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
375 |
CALL GAD_FLUXLIMIT_ADV_X( bi,bj,k, dTtracerLev(k), |
CALL GAD_FLUXLIMIT_ADV_X( bi,bj,k, .TRUE., dTtracerLev(k), |
376 |
I uTrans, uFld, maskLocW, localTij, |
I uTrans, uFld, maskLocW, localTij, |
377 |
O af, myThid ) |
O af, myThid ) |
378 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
379 |
CALL GAD_DST3_ADV_X( bi,bj,k, dTtracerLev(k), |
CALL GAD_DST3_ADV_X( bi,bj,k, .TRUE., dTtracerLev(k), |
380 |
I uTrans, uFld, maskLocW, localTij, |
I uTrans, uFld, maskLocW, localTij, |
381 |
O af, myThid ) |
O af, myThid ) |
382 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
383 |
CALL GAD_DST3FL_ADV_X( bi,bj,k, dTtracerLev(k), |
CALL GAD_DST3FL_ADV_X( bi,bj,k, .TRUE., dTtracerLev(k), |
384 |
|
I uTrans, uFld, maskLocW, localTij, |
385 |
|
O af, myThid ) |
386 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
387 |
|
ELSEIF (advectionScheme.EQ.ENUM_OS7MP ) THEN |
388 |
|
CALL GAD_OS7MP_ADV_X( bi,bj,k, .TRUE., dTtracerLev(k), |
389 |
I uTrans, uFld, maskLocW, localTij, |
I uTrans, uFld, maskLocW, localTij, |
390 |
O af, myThid ) |
O af, myThid ) |
391 |
|
#endif |
392 |
ELSE |
ELSE |
393 |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with multi-dim' |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with multi-dim' |
394 |
ENDIF |
ENDIF |
396 |
C- Advective flux in X : done |
C- Advective flux in X : done |
397 |
ENDIF |
ENDIF |
398 |
|
|
399 |
#ifndef ALLOW_AUTODIFF_TAMC |
cph-exch2#ifndef ALLOW_AUTODIFF_TAMC |
400 |
C- Internal exchange for next calculations in Y |
C- Internal exchange for next calculations in Y |
401 |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
402 |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
403 |
ENDIF |
ENDIF |
404 |
#endif |
cph-exch2#endif |
405 |
|
|
406 |
C- Update the local tracer field where needed: |
C- Update the local tracer field where needed: |
407 |
|
|
417 |
IF ( S_edge ) THEN |
IF ( S_edge ) THEN |
418 |
DO j=1-Oly,0 |
DO j=1-Oly,0 |
419 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
420 |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
localTij(i,j) = localTij(i,j) |
421 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& -dTtracerLev(k)*recip_rhoFacC(k) |
422 |
& *recip_rA(i,j,bi,bj) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
423 |
|
& *recip_rA(i,j,bi,bj)*recip_deepFac2C(k) |
424 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
425 |
& -tracer(i,j,k,bi,bj)*(uTrans(i+1,j)-uTrans(i,j)) |
& -tracer(i,j,k,bi,bj)*(uTrans(i+1,j)-uTrans(i,j)) |
426 |
& ) |
& ) |
430 |
IF ( N_edge ) THEN |
IF ( N_edge ) THEN |
431 |
DO j=sNy+1,sNy+Oly |
DO j=sNy+1,sNy+Oly |
432 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
433 |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
localTij(i,j) = localTij(i,j) |
434 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& -dTtracerLev(k)*recip_rhoFacC(k) |
435 |
& *recip_rA(i,j,bi,bj) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
436 |
|
& *recip_rA(i,j,bi,bj)*recip_deepFac2C(k) |
437 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
438 |
& -tracer(i,j,k,bi,bj)*(uTrans(i+1,j)-uTrans(i,j)) |
& -tracer(i,j,k,bi,bj)*(uTrans(i+1,j)-uTrans(i,j)) |
439 |
& ) |
& ) |
449 |
IF ( interiorOnly .AND. N_edge ) jMaxUpd = sNy |
IF ( interiorOnly .AND. N_edge ) jMaxUpd = sNy |
450 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
451 |
DO i=1-Olx+1,sNx+Olx-1 |
DO i=1-Olx+1,sNx+Olx-1 |
452 |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
localTij(i,j) = localTij(i,j) |
453 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& -dTtracerLev(k)*recip_rhoFacC(k) |
454 |
& *recip_rA(i,j,bi,bj) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
455 |
|
& *recip_rA(i,j,bi,bj)*recip_deepFac2C(k) |
456 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
457 |
& -tracer(i,j,k,bi,bj)*(uTrans(i+1,j)-uTrans(i,j)) |
& -tracer(i,j,k,bi,bj)*(uTrans(i+1,j)-uTrans(i,j)) |
458 |
& ) |
& ) |
513 |
C and b) the overlap of myTile are not cube-face edges |
C and b) the overlap of myTile are not cube-face edges |
514 |
IF ( .NOT.overlapOnly .OR. E_edge .OR. W_edge ) THEN |
IF ( .NOT.overlapOnly .OR. E_edge .OR. W_edge ) THEN |
515 |
|
|
516 |
#ifndef ALLOW_AUTODIFF_TAMC |
cph-exch2#ifndef ALLOW_AUTODIFF_TAMC |
517 |
C- Internal exchange for calculations in Y |
C- Internal exchange for calculations in Y |
518 |
#ifdef MULTIDIM_OLD_VERSION |
#ifdef MULTIDIM_OLD_VERSION |
519 |
IF ( useCubedSphereExchange ) THEN |
IF ( useCubedSphereExchange ) THEN |
523 |
#endif |
#endif |
524 |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
525 |
ENDIF |
ENDIF |
526 |
#endif |
cph-exch2#endif |
527 |
|
|
528 |
C- Advective flux in Y |
C- Advective flux in Y |
529 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
541 |
|
|
542 |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
543 |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
544 |
CALL GAD_DST2U1_ADV_Y( bi,bj,k, advectionScheme, |
CALL GAD_DST2U1_ADV_Y( bi,bj,k, advectionScheme, .TRUE., |
545 |
I dTtracerLev(k),vTrans,vFld,localTij, |
I dTtracerLev(k),vTrans,vFld,localTij, |
546 |
O af, myThid ) |
O af, myThid ) |
547 |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
548 |
CALL GAD_FLUXLIMIT_ADV_Y( bi,bj,k, dTtracerLev(k), |
CALL GAD_FLUXLIMIT_ADV_Y( bi,bj,k, .TRUE., dTtracerLev(k), |
549 |
I vTrans, vFld, maskLocS, localTij, |
I vTrans, vFld, maskLocS, localTij, |
550 |
O af, myThid ) |
O af, myThid ) |
551 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
552 |
CALL GAD_DST3_ADV_Y( bi,bj,k, dTtracerLev(k), |
CALL GAD_DST3_ADV_Y( bi,bj,k, .TRUE., dTtracerLev(k), |
553 |
I vTrans, vFld, maskLocS, localTij, |
I vTrans, vFld, maskLocS, localTij, |
554 |
O af, myThid ) |
O af, myThid ) |
555 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
556 |
CALL GAD_DST3FL_ADV_Y( bi,bj,k, dTtracerLev(k), |
CALL GAD_DST3FL_ADV_Y( bi,bj,k, .TRUE., dTtracerLev(k), |
557 |
|
I vTrans, vFld, maskLocS, localTij, |
558 |
|
O af, myThid ) |
559 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
560 |
|
ELSEIF (advectionScheme.EQ.ENUM_OS7MP ) THEN |
561 |
|
CALL GAD_OS7MP_ADV_Y( bi,bj,k, .TRUE., dTtracerLev(k), |
562 |
I vTrans, vFld, maskLocS, localTij, |
I vTrans, vFld, maskLocS, localTij, |
563 |
O af, myThid ) |
O af, myThid ) |
564 |
|
#endif |
565 |
ELSE |
ELSE |
566 |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
567 |
ENDIF |
ENDIF |
569 |
C- Advective flux in Y : done |
C- Advective flux in Y : done |
570 |
ENDIF |
ENDIF |
571 |
|
|
572 |
#ifndef ALLOW_AUTODIFF_TAMC |
cph-exch2#ifndef ALLOW_AUTODIFF_TAMC |
573 |
C- Internal exchange for next calculations in X |
C- Internal exchange for next calculations in X |
574 |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
575 |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
576 |
ENDIF |
ENDIF |
577 |
#endif |
cph-exch2#endif |
578 |
|
|
579 |
C- Update the local tracer field where needed: |
C- Update the local tracer field where needed: |
580 |
|
|
590 |
IF ( W_edge ) THEN |
IF ( W_edge ) THEN |
591 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
592 |
DO i=1-Olx,0 |
DO i=1-Olx,0 |
593 |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
localTij(i,j) = localTij(i,j) |
594 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& -dTtracerLev(k)*recip_rhoFacC(k) |
595 |
& *recip_rA(i,j,bi,bj) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
596 |
|
& *recip_rA(i,j,bi,bj)*recip_deepFac2C(k) |
597 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
598 |
& -tracer(i,j,k,bi,bj)*(vTrans(i,j+1)-vTrans(i,j)) |
& -tracer(i,j,k,bi,bj)*(vTrans(i,j+1)-vTrans(i,j)) |
599 |
& ) |
& ) |
603 |
IF ( E_edge ) THEN |
IF ( E_edge ) THEN |
604 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
605 |
DO i=sNx+1,sNx+Olx |
DO i=sNx+1,sNx+Olx |
606 |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
localTij(i,j) = localTij(i,j) |
607 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& -dTtracerLev(k)*recip_rhoFacC(k) |
608 |
& *recip_rA(i,j,bi,bj) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
609 |
|
& *recip_rA(i,j,bi,bj)*recip_deepFac2C(k) |
610 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
611 |
& -tracer(i,j,k,bi,bj)*(vTrans(i,j+1)-vTrans(i,j)) |
& -tracer(i,j,k,bi,bj)*(vTrans(i,j+1)-vTrans(i,j)) |
612 |
& ) |
& ) |
622 |
IF ( interiorOnly .AND. E_edge ) iMaxUpd = sNx |
IF ( interiorOnly .AND. E_edge ) iMaxUpd = sNx |
623 |
DO j=1-Oly+1,sNy+Oly-1 |
DO j=1-Oly+1,sNy+Oly-1 |
624 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
625 |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
localTij(i,j) = localTij(i,j) |
626 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& -dTtracerLev(k)*recip_rhoFacC(k) |
627 |
& *recip_rA(i,j,bi,bj) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
628 |
|
& *recip_rA(i,j,bi,bj)*recip_deepFac2C(k) |
629 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
630 |
& -tracer(i,j,k,bi,bj)*(vTrans(i,j+1)-vTrans(i,j)) |
& -tracer(i,j,k,bi,bj)*(vTrans(i,j+1)-vTrans(i,j)) |
631 |
& ) |
& ) |
673 |
ENDDO |
ENDDO |
674 |
ELSE |
ELSE |
675 |
C- horizontal advection done; store intermediate result in 3D array: |
C- horizontal advection done; store intermediate result in 3D array: |
676 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
677 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
678 |
localTijk(i,j,k)=localTij(i,j) |
localTijk(i,j,k)=localTij(i,j) |
679 |
|
ENDDO |
680 |
ENDDO |
ENDDO |
|
ENDDO |
|
681 |
ENDIF |
ENDIF |
682 |
|
|
683 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
761 |
rTransKp1(i,j) = kp1Msk*rTrans(i,j) |
rTransKp1(i,j) = kp1Msk*rTrans(i,j) |
762 |
wFld(i,j) = wVel(i,j,k,bi,bj) |
wFld(i,j) = wVel(i,j,k,bi,bj) |
763 |
rTrans(i,j) = wVel(i,j,k,bi,bj)*rA(i,j,bi,bj) |
rTrans(i,j) = wVel(i,j,k,bi,bj)*rA(i,j,bi,bj) |
764 |
|
& *deepFac2F(k)*rhoFacF(k) |
765 |
& *maskC(i,j,k-1,bi,bj) |
& *maskC(i,j,k-1,bi,bj) |
766 |
fVerT(i,j,kUp) = 0. |
fVerT(i,j,kUp) = 0. |
767 |
ENDDO |
ENDDO |
783 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
784 |
|
|
785 |
C- Compute vertical advective flux in the interior: |
C- Compute vertical advective flux in the interior: |
786 |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
IF ( vertAdvecScheme.EQ.ENUM_UPWIND_1RST |
787 |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
& .OR. vertAdvecScheme.EQ.ENUM_DST2 ) THEN |
788 |
CALL GAD_DST2U1_ADV_R( bi,bj,k, advectionScheme, |
CALL GAD_DST2U1_ADV_R( bi,bj,k, advectionScheme, |
789 |
I dTtracerLev(k),rTrans,wFld,localTijk, |
I dTtracerLev(k),rTrans,wFld,localTijk, |
790 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
791 |
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
ELSEIF( vertAdvecScheme.EQ.ENUM_FLUX_LIMIT) THEN |
792 |
CALL GAD_FLUXLIMIT_ADV_R( bi,bj,k, dTtracerLev(k), |
CALL GAD_FLUXLIMIT_ADV_R( bi,bj,k, dTtracerLev(k), |
793 |
I rTrans, wFld, localTijk, |
I rTrans, wFld, localTijk, |
794 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
795 |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF( vertAdvecScheme.EQ.ENUM_DST3 ) THEN |
796 |
CALL GAD_DST3_ADV_R( bi,bj,k, dTtracerLev(k), |
CALL GAD_DST3_ADV_R( bi,bj,k, dTtracerLev(k), |
797 |
I rTrans, wFld, localTijk, |
I rTrans, wFld, localTijk, |
798 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
799 |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF( vertAdvecScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
800 |
CALL GAD_DST3FL_ADV_R( bi,bj,k, dTtracerLev(k), |
CALL GAD_DST3FL_ADV_R( bi,bj,k, dTtracerLev(k), |
801 |
I rTrans, wFld, localTijk, |
I rTrans, wFld, localTijk, |
802 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
803 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
804 |
|
ELSEIF (vertAdvecScheme.EQ.ENUM_OS7MP ) THEN |
805 |
|
CALL GAD_OS7MP_ADV_R( bi,bj,k, dTtracerLev(k), |
806 |
|
I rTrans, wFld, localTijk, |
807 |
|
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
808 |
|
#endif |
809 |
ELSE |
ELSE |
810 |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim' |
811 |
ENDIF |
ENDIF |
823 |
C-- Divergence of vertical fluxes |
C-- Divergence of vertical fluxes |
824 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
825 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
826 |
localTij(i,j)=localTijk(i,j,k)-dTtracerLev(k)* |
localTij(i,j) = localTijk(i,j,k) |
827 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& -dTtracerLev(k)*recip_rhoFacC(k) |
828 |
& *recip_rA(i,j,bi,bj) |
& *_recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
829 |
& *( fVerT(i,j,kDown)-fVerT(i,j,kUp) |
& *recip_rA(i,j,bi,bj)*recip_deepFac2C(k) |
830 |
& -tracer(i,j,k,bi,bj)*(rTransKp1(i,j)-rTrans(i,j)) |
& *( fVerT(i,j,kDown)-fVerT(i,j,kUp) |
831 |
& )*rkSign |
& -tracer(i,j,k,bi,bj)*(rTransKp1(i,j)-rTrans(i,j)) |
832 |
|
& )*rkSign |
833 |
gTracer(i,j,k,bi,bj)= |
gTracer(i,j,k,bi,bj)= |
834 |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/dTtracerLev(k) |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/dTtracerLev(k) |
835 |
ENDDO |
ENDDO |