332 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
333 |
|
|
334 |
IF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
IF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
335 |
CALL GAD_FLUXLIMIT_ADV_X( bi,bj,k, deltaTtracer, |
CALL GAD_FLUXLIMIT_ADV_X( bi,bj,k, dTtracerLev(k), |
336 |
I uTrans, uVel, maskLocW, localTij, |
I uTrans, uVel, maskLocW, localTij, |
337 |
O af, myThid ) |
O af, myThid ) |
338 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
339 |
CALL GAD_DST3_ADV_X( bi,bj,k, deltaTtracer, |
CALL GAD_DST3_ADV_X( bi,bj,k, dTtracerLev(k), |
340 |
I uTrans, uVel, maskLocW, localTij, |
I uTrans, uVel, maskLocW, localTij, |
341 |
O af, myThid ) |
O af, myThid ) |
342 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
343 |
CALL GAD_DST3FL_ADV_X( bi,bj,k, deltaTtracer, |
CALL GAD_DST3FL_ADV_X( bi,bj,k, dTtracerLev(k), |
344 |
I uTrans, uVel, maskLocW, localTij, |
I uTrans, uVel, maskLocW, localTij, |
345 |
O af, myThid ) |
O af, myThid ) |
346 |
ELSE |
ELSE |
371 |
IF ( S_edge ) THEN |
IF ( S_edge ) THEN |
372 |
DO j=1-Oly,0 |
DO j=1-Oly,0 |
373 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
374 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
375 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
376 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
377 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
383 |
IF ( N_edge ) THEN |
IF ( N_edge ) THEN |
384 |
DO j=sNy+1,sNy+Oly |
DO j=sNy+1,sNy+Oly |
385 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
386 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
387 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
388 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
389 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
401 |
IF ( interiorOnly .AND. N_edge ) jMaxUpd = sNy |
IF ( interiorOnly .AND. N_edge ) jMaxUpd = sNy |
402 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
403 |
DO i=1-Olx+1,sNx+Olx-1 |
DO i=1-Olx+1,sNx+Olx-1 |
404 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
405 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
406 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
407 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
469 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
470 |
|
|
471 |
IF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
IF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
472 |
CALL GAD_FLUXLIMIT_ADV_Y( bi,bj,k, deltaTtracer, |
CALL GAD_FLUXLIMIT_ADV_Y( bi,bj,k, dTtracerLev(k), |
473 |
I vTrans, vVel, maskLocS, localTij, |
I vTrans, vVel, maskLocS, localTij, |
474 |
O af, myThid ) |
O af, myThid ) |
475 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
476 |
CALL GAD_DST3_ADV_Y( bi,bj,k, deltaTtracer, |
CALL GAD_DST3_ADV_Y( bi,bj,k, dTtracerLev(k), |
477 |
I vTrans, vVel, maskLocS, localTij, |
I vTrans, vVel, maskLocS, localTij, |
478 |
O af, myThid ) |
O af, myThid ) |
479 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
480 |
CALL GAD_DST3FL_ADV_Y( bi,bj,k, deltaTtracer, |
CALL GAD_DST3FL_ADV_Y( bi,bj,k, dTtracerLev(k), |
481 |
I vTrans, vVel, maskLocS, localTij, |
I vTrans, vVel, maskLocS, localTij, |
482 |
O af, myThid ) |
O af, myThid ) |
483 |
ELSE |
ELSE |
508 |
IF ( W_edge ) THEN |
IF ( W_edge ) THEN |
509 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
510 |
DO i=1-Olx,0 |
DO i=1-Olx,0 |
511 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
512 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
513 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
514 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
520 |
IF ( E_edge ) THEN |
IF ( E_edge ) THEN |
521 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
522 |
DO i=sNx+1,sNx+Olx |
DO i=sNx+1,sNx+Olx |
523 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
524 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
525 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
526 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
538 |
IF ( interiorOnly .AND. E_edge ) iMaxUpd = sNx |
IF ( interiorOnly .AND. E_edge ) iMaxUpd = sNx |
539 |
DO j=1-Oly+1,sNy+Oly-1 |
DO j=1-Oly+1,sNy+Oly-1 |
540 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
541 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
542 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
543 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
544 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
578 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
579 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
580 |
gTracer(i,j,k,bi,bj)= |
gTracer(i,j,k,bi,bj)= |
581 |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/deltaTtracer |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/dTtracerLev(k) |
582 |
ENDDO |
ENDDO |
583 |
ENDDO |
ENDDO |
584 |
ELSE |
ELSE |
668 |
C- Compute vertical advective flux in the interior: |
C- Compute vertical advective flux in the interior: |
669 |
IF (vertAdvecScheme.EQ.ENUM_FLUX_LIMIT) THEN |
IF (vertAdvecScheme.EQ.ENUM_FLUX_LIMIT) THEN |
670 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
671 |
CALL GAD_FLUXLIMIT_ADV_R( bi,bj,k, deltaTtracer, |
CALL GAD_FLUXLIMIT_ADV_R( bi,bj,k, dTtracerLev(k), |
672 |
I rTrans, wVel, localTijk, |
I rTrans, wVel, localTijk, |
673 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
674 |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3 ) THEN |
675 |
CALL GAD_DST3_ADV_R( bi,bj,k, deltaTtracer, |
CALL GAD_DST3_ADV_R( bi,bj,k, dTtracerLev(k), |
676 |
I rTrans, wVel, localTijk, |
I rTrans, wVel, localTijk, |
677 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
678 |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
679 |
CALL GAD_DST3FL_ADV_R( bi,bj,k, deltaTtracer, |
CALL GAD_DST3FL_ADV_R( bi,bj,k, dTtracerLev(k), |
680 |
I rTrans, wVel, localTijk, |
I rTrans, wVel, localTijk, |
681 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
682 |
ELSE |
ELSE |
696 |
C-- Divergence of vertical fluxes |
C-- Divergence of vertical fluxes |
697 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
698 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
699 |
localTij(i,j)=localTijk(i,j,k)-deltaTtracer* |
localTij(i,j)=localTijk(i,j,k)-dTtracerLev(k)* |
700 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
701 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
702 |
& *( fVerT(i,j,kUp)-fVerT(i,j,kDown) |
& *( fVerT(i,j,kUp)-fVerT(i,j,kDown) |
703 |
& -tracer(i,j,k,bi,bj)*(rTrans(i,j)-rTransKp1(i,j)) |
& -tracer(i,j,k,bi,bj)*(rTrans(i,j)-rTransKp1(i,j)) |
704 |
& )*rkFac |
& )*rkFac |
705 |
gTracer(i,j,k,bi,bj)= |
gTracer(i,j,k,bi,bj)= |
706 |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/deltaTtracer |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/dTtracerLev(k) |
707 |
ENDDO |
ENDDO |
708 |
ENDDO |
ENDDO |
709 |
|
|