138 |
LOGICAL calc_fluxes_X, calc_fluxes_Y, withSigns |
LOGICAL calc_fluxes_X, calc_fluxes_Y, withSigns |
139 |
LOGICAL interiorOnly, overlapOnly |
LOGICAL interiorOnly, overlapOnly |
140 |
INTEGER nipass,ipass |
INTEGER nipass,ipass |
141 |
INTEGER myTile, nCFace |
INTEGER nCFace |
142 |
LOGICAL N_edge, S_edge, E_edge, W_edge |
LOGICAL N_edge, S_edge, E_edge, W_edge |
143 |
|
#ifdef ALLOW_EXCH2 |
144 |
|
INTEGER myTile |
145 |
|
#endif |
146 |
|
#ifdef ALLOW_DIAGNOSTICS |
147 |
|
CHARACTER*8 diagName |
148 |
|
CHARACTER*4 GAD_DIAG_SUFX, diagSufx |
149 |
|
EXTERNAL GAD_DIAG_SUFX |
150 |
|
#endif |
151 |
CEOP |
CEOP |
152 |
|
|
153 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
171 |
endif |
endif |
172 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
173 |
|
|
174 |
|
#ifdef ALLOW_DIAGNOSTICS |
175 |
|
C-- Set diagnostic suffix for the current tracer |
176 |
|
IF ( useDiagnostics ) THEN |
177 |
|
diagSufx = GAD_DIAG_SUFX( tracerIdentity, myThid ) |
178 |
|
ENDIF |
179 |
|
#endif |
180 |
|
|
181 |
C-- Set up work arrays with valid (i.e. not NaN) values |
C-- Set up work arrays with valid (i.e. not NaN) values |
182 |
C These inital values do not alter the numerical results. They |
C These inital values do not alter the numerical results. They |
183 |
C just ensure that all memory references are to valid floating |
C just ensure that all memory references are to valid floating |
218 |
#endif |
#endif |
219 |
ELSE |
ELSE |
220 |
nipass=2 |
nipass=2 |
221 |
|
nCFace = bi |
222 |
N_edge = .FALSE. |
N_edge = .FALSE. |
223 |
S_edge = .FALSE. |
S_edge = .FALSE. |
224 |
E_edge = .FALSE. |
E_edge = .FALSE. |
260 |
ENDDO |
ENDDO |
261 |
ENDDO |
ENDDO |
262 |
|
|
263 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
264 |
IF (useCubedSphereExchange) THEN |
IF (useCubedSphereExchange) THEN |
265 |
withSigns = .FALSE. |
withSigns = .FALSE. |
266 |
CALL FILL_CS_CORNER_UV_RS( |
CALL FILL_CS_CORNER_UV_RS( |
267 |
& withSigns, maskLocW,maskLocS, bi,bj, myThid ) |
& withSigns, maskLocW,maskLocS, bi,bj, myThid ) |
268 |
ENDIF |
ENDIF |
269 |
|
#endif |
270 |
|
|
271 |
C-- Multiple passes for different directions on different tiles |
C-- Multiple passes for different directions on different tiles |
272 |
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. |
321 |
C and b) the overlap of myTile are not cube-face Edges |
C and b) the overlap of myTile are not cube-face Edges |
322 |
IF ( .NOT.overlapOnly .OR. N_edge .OR. S_edge ) THEN |
IF ( .NOT.overlapOnly .OR. N_edge .OR. S_edge ) THEN |
323 |
|
|
324 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
325 |
C- Internal exchange for calculations in X |
C- Internal exchange for calculations in X |
326 |
#ifdef MULTIDIM_OLD_VERSION |
#ifdef MULTIDIM_OLD_VERSION |
327 |
IF ( useCubedSphereExchange ) THEN |
IF ( useCubedSphereExchange ) THEN |
331 |
#endif |
#endif |
332 |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
333 |
ENDIF |
ENDIF |
334 |
|
#endif |
335 |
|
|
336 |
C- Advective flux in X |
C- Advective flux in X |
337 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
347 |
#endif |
#endif |
348 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
349 |
|
|
350 |
IF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
351 |
CALL GAD_FLUXLIMIT_ADV_X( bi,bj,k, deltaTtracer, |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
352 |
|
CALL GAD_DST2U1_ADV_X( bi,bj,k, advectionScheme, |
353 |
|
I dTtracerLev(k),uTrans,uVel,localTij, |
354 |
|
O af, myThid ) |
355 |
|
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
356 |
|
CALL GAD_FLUXLIMIT_ADV_X( bi,bj,k, dTtracerLev(k), |
357 |
I uTrans, uVel, maskLocW, localTij, |
I uTrans, uVel, maskLocW, localTij, |
358 |
O af, myThid ) |
O af, myThid ) |
359 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
360 |
CALL GAD_DST3_ADV_X( bi,bj,k, deltaTtracer, |
CALL GAD_DST3_ADV_X( bi,bj,k, dTtracerLev(k), |
361 |
I uTrans, uVel, maskLocW, localTij, |
I uTrans, uVel, maskLocW, localTij, |
362 |
O af, myThid ) |
O af, myThid ) |
363 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
364 |
CALL GAD_DST3FL_ADV_X( bi,bj,k, deltaTtracer, |
CALL GAD_DST3FL_ADV_X( bi,bj,k, dTtracerLev(k), |
365 |
I uTrans, uVel, maskLocW, localTij, |
I uTrans, uVel, maskLocW, localTij, |
366 |
O af, myThid ) |
O af, myThid ) |
367 |
ELSE |
ELSE |
371 |
C- Advective flux in X : done |
C- Advective flux in X : done |
372 |
ENDIF |
ENDIF |
373 |
|
|
374 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
375 |
C- Internal exchange for next calculations in Y |
C- Internal exchange for next calculations in Y |
376 |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
377 |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
378 |
ENDIF |
ENDIF |
379 |
|
#endif |
380 |
|
|
381 |
C- Update the local tracer field where needed: |
C- Update the local tracer field where needed: |
382 |
|
|
392 |
IF ( S_edge ) THEN |
IF ( S_edge ) THEN |
393 |
DO j=1-Oly,0 |
DO j=1-Oly,0 |
394 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
395 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
396 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
397 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
398 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
404 |
IF ( N_edge ) THEN |
IF ( N_edge ) THEN |
405 |
DO j=sNy+1,sNy+Oly |
DO j=sNy+1,sNy+Oly |
406 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
407 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
408 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
409 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
410 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
422 |
IF ( interiorOnly .AND. N_edge ) jMaxUpd = sNy |
IF ( interiorOnly .AND. N_edge ) jMaxUpd = sNy |
423 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
424 |
DO i=1-Olx+1,sNx+Olx-1 |
DO i=1-Olx+1,sNx+Olx-1 |
425 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
426 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
427 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
428 |
& *( af(i+1,j)-af(i,j) |
& *( af(i+1,j)-af(i,j) |
444 |
CALL OBCS_APPLY_TLOC( bi, bj, k, localTij, myThid ) |
CALL OBCS_APPLY_TLOC( bi, bj, k, localTij, myThid ) |
445 |
ELSEIF (tracerIdentity.EQ.GAD_SALINITY) THEN |
ELSEIF (tracerIdentity.EQ.GAD_SALINITY) THEN |
446 |
CALL OBCS_APPLY_SLOC( bi, bj, k, localTij, myThid ) |
CALL OBCS_APPLY_SLOC( bi, bj, k, localTij, myThid ) |
447 |
|
#ifdef ALLOW_PTRACERS |
448 |
|
ELSEIF (tracerIdentity.GE.GAD_TR1) THEN |
449 |
|
CALL OBCS_APPLY_PTRACER( bi, bj, k, |
450 |
|
& tracerIdentity-GAD_TR1+1, localTij, myThid ) |
451 |
|
#endif /* ALLOW_PTRACERS */ |
452 |
ENDIF |
ENDIF |
453 |
ENDIF |
ENDIF |
454 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
468 |
C and b) the overlap of myTile are not cube-face edges |
C and b) the overlap of myTile are not cube-face edges |
469 |
IF ( .NOT.overlapOnly .OR. E_edge .OR. W_edge ) THEN |
IF ( .NOT.overlapOnly .OR. E_edge .OR. W_edge ) THEN |
470 |
|
|
471 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
472 |
C- Internal exchange for calculations in Y |
C- Internal exchange for calculations in Y |
473 |
#ifdef MULTIDIM_OLD_VERSION |
#ifdef MULTIDIM_OLD_VERSION |
474 |
IF ( useCubedSphereExchange ) THEN |
IF ( useCubedSphereExchange ) THEN |
478 |
#endif |
#endif |
479 |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL(.FALSE., localTij, bi,bj, myThid ) |
480 |
ENDIF |
ENDIF |
481 |
|
#endif |
482 |
|
|
483 |
C- Advective flux in Y |
C- Advective flux in Y |
484 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
494 |
#endif |
#endif |
495 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
496 |
|
|
497 |
IF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
498 |
CALL GAD_FLUXLIMIT_ADV_Y( bi,bj,k, deltaTtracer, |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
499 |
|
CALL GAD_DST2U1_ADV_Y( bi,bj,k, advectionScheme, |
500 |
|
I dTtracerLev(k),vTrans,vVel,localTij, |
501 |
|
O af, myThid ) |
502 |
|
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
503 |
|
CALL GAD_FLUXLIMIT_ADV_Y( bi,bj,k, dTtracerLev(k), |
504 |
I vTrans, vVel, maskLocS, localTij, |
I vTrans, vVel, maskLocS, localTij, |
505 |
O af, myThid ) |
O af, myThid ) |
506 |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3 ) THEN |
507 |
CALL GAD_DST3_ADV_Y( bi,bj,k, deltaTtracer, |
CALL GAD_DST3_ADV_Y( bi,bj,k, dTtracerLev(k), |
508 |
I vTrans, vVel, maskLocS, localTij, |
I vTrans, vVel, maskLocS, localTij, |
509 |
O af, myThid ) |
O af, myThid ) |
510 |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (advectionScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
511 |
CALL GAD_DST3FL_ADV_Y( bi,bj,k, deltaTtracer, |
CALL GAD_DST3FL_ADV_Y( bi,bj,k, dTtracerLev(k), |
512 |
I vTrans, vVel, maskLocS, localTij, |
I vTrans, vVel, maskLocS, localTij, |
513 |
O af, myThid ) |
O af, myThid ) |
514 |
ELSE |
ELSE |
518 |
C- Advective flux in Y : done |
C- Advective flux in Y : done |
519 |
ENDIF |
ENDIF |
520 |
|
|
521 |
|
#ifndef ALLOW_AUTODIFF_TAMC |
522 |
C- Internal exchange for next calculations in X |
C- Internal exchange for next calculations in X |
523 |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
IF ( overlapOnly .AND. ipass.EQ.1 ) THEN |
524 |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
CALL FILL_CS_CORNER_TR_RL( .TRUE., localTij, bi,bj, myThid ) |
525 |
ENDIF |
ENDIF |
526 |
|
#endif |
527 |
|
|
528 |
C- Update the local tracer field where needed: |
C- Update the local tracer field where needed: |
529 |
|
|
539 |
IF ( W_edge ) THEN |
IF ( W_edge ) THEN |
540 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
541 |
DO i=1-Olx,0 |
DO i=1-Olx,0 |
542 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
543 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
544 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
545 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
551 |
IF ( E_edge ) THEN |
IF ( E_edge ) THEN |
552 |
DO j=jMinUpd,jMaxUpd |
DO j=jMinUpd,jMaxUpd |
553 |
DO i=sNx+1,sNx+Olx |
DO i=sNx+1,sNx+Olx |
554 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
555 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
556 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
557 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
569 |
IF ( interiorOnly .AND. E_edge ) iMaxUpd = sNx |
IF ( interiorOnly .AND. E_edge ) iMaxUpd = sNx |
570 |
DO j=1-Oly+1,sNy+Oly-1 |
DO j=1-Oly+1,sNy+Oly-1 |
571 |
DO i=iMinUpd,iMaxUpd |
DO i=iMinUpd,iMaxUpd |
572 |
localTij(i,j)=localTij(i,j)-deltaTtracer* |
localTij(i,j)=localTij(i,j)-dTtracerLev(k)* |
573 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
574 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
575 |
& *( af(i,j+1)-af(i,j) |
& *( af(i,j+1)-af(i,j) |
591 |
CALL OBCS_APPLY_TLOC( bi, bj, k, localTij, myThid ) |
CALL OBCS_APPLY_TLOC( bi, bj, k, localTij, myThid ) |
592 |
ELSEIF (tracerIdentity.EQ.GAD_SALINITY) THEN |
ELSEIF (tracerIdentity.EQ.GAD_SALINITY) THEN |
593 |
CALL OBCS_APPLY_SLOC( bi, bj, k, localTij, myThid ) |
CALL OBCS_APPLY_SLOC( bi, bj, k, localTij, myThid ) |
594 |
|
#ifdef ALLOW_PTRACERS |
595 |
|
ELSEIF (tracerIdentity.GE.GAD_TR1) THEN |
596 |
|
CALL OBCS_APPLY_PTRACER( bi, bj, k, |
597 |
|
& tracerIdentity-GAD_TR1+1, localTij, myThid ) |
598 |
|
#endif /* ALLOW_PTRACERS */ |
599 |
ENDIF |
ENDIF |
600 |
ENDIF |
ENDIF |
601 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
614 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
615 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
616 |
gTracer(i,j,k,bi,bj)= |
gTracer(i,j,k,bi,bj)= |
617 |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/deltaTtracer |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/dTtracerLev(k) |
618 |
ENDDO |
ENDDO |
619 |
ENDDO |
ENDDO |
620 |
ELSE |
ELSE |
626 |
ENDDO |
ENDDO |
627 |
ENDIF |
ENDIF |
628 |
|
|
629 |
|
#ifdef ALLOW_DIAGNOSTICS |
630 |
|
IF ( useDiagnostics ) THEN |
631 |
|
diagName = 'ADVx'//diagSufx |
632 |
|
CALL DIAGNOSTICS_FILL(afx,diagName, k,1, 2,bi,bj, myThid) |
633 |
|
diagName = 'ADVy'//diagSufx |
634 |
|
CALL DIAGNOSTICS_FILL(afy,diagName, k,1, 2,bi,bj, myThid) |
635 |
|
ENDIF |
636 |
|
#endif |
637 |
|
|
638 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
639 |
IF ( debugLevel .GE. debLevB |
IF ( debugLevel .GE. debLevB |
640 |
& .AND. tracerIdentity.EQ.GAD_TEMPERATURE |
& .AND. tracerIdentity.EQ.GAD_TEMPERATURE |
711 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
712 |
|
|
713 |
C- Compute vertical advective flux in the interior: |
C- Compute vertical advective flux in the interior: |
714 |
IF (vertAdvecScheme.EQ.ENUM_FLUX_LIMIT) THEN |
IF ( advectionScheme.EQ.ENUM_UPWIND_1RST |
715 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
& .OR. advectionScheme.EQ.ENUM_DST2 ) THEN |
716 |
CALL GAD_FLUXLIMIT_ADV_R( bi,bj,k, deltaTtracer, |
CALL GAD_DST2U1_ADV_R( bi,bj,k, advectionScheme, |
717 |
|
I dTtracerLev(k),rTrans,wVel,localTijk, |
718 |
|
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
719 |
|
ELSEIF (advectionScheme.EQ.ENUM_FLUX_LIMIT) THEN |
720 |
|
CALL GAD_FLUXLIMIT_ADV_R( bi,bj,k, dTtracerLev(k), |
721 |
I rTrans, wVel, localTijk, |
I rTrans, wVel, localTijk, |
722 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
723 |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3 ) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3 ) THEN |
724 |
CALL GAD_DST3_ADV_R( bi,bj,k, deltaTtracer, |
CALL GAD_DST3_ADV_R( bi,bj,k, dTtracerLev(k), |
725 |
I rTrans, wVel, localTijk, |
I rTrans, wVel, localTijk, |
726 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
727 |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
ELSEIF (vertAdvecScheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN |
728 |
CALL GAD_DST3FL_ADV_R( bi,bj,k, deltaTtracer, |
CALL GAD_DST3FL_ADV_R( bi,bj,k, dTtracerLev(k), |
729 |
I rTrans, wVel, localTijk, |
I rTrans, wVel, localTijk, |
730 |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
O fVerT(1-Olx,1-Oly,kUp), myThid ) |
731 |
ELSE |
ELSE |
745 |
C-- Divergence of vertical fluxes |
C-- Divergence of vertical fluxes |
746 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
747 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
748 |
localTij(i,j)=localTijk(i,j,k)-deltaTtracer* |
localTij(i,j)=localTijk(i,j,k)-dTtracerLev(k)* |
749 |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
& _recip_hFacC(i,j,k,bi,bj)*recip_drF(k) |
750 |
& *recip_rA(i,j,bi,bj) |
& *recip_rA(i,j,bi,bj) |
751 |
& *( fVerT(i,j,kUp)-fVerT(i,j,kDown) |
& *( fVerT(i,j,kDown)-fVerT(i,j,kUp) |
752 |
& -tracer(i,j,k,bi,bj)*(rTrans(i,j)-rTransKp1(i,j)) |
& -tracer(i,j,k,bi,bj)*(rTransKp1(i,j)-rTrans(i,j)) |
753 |
& )*rkFac |
& )*rkSign |
754 |
gTracer(i,j,k,bi,bj)= |
gTracer(i,j,k,bi,bj)= |
755 |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/deltaTtracer |
& (localTij(i,j)-tracer(i,j,k,bi,bj))/dTtracerLev(k) |
756 |
ENDDO |
ENDDO |
757 |
ENDDO |
ENDDO |
758 |
|
|
759 |
|
#ifdef ALLOW_DIAGNOSTICS |
760 |
|
IF ( useDiagnostics ) THEN |
761 |
|
diagName = 'ADVr'//diagSufx |
762 |
|
CALL DIAGNOSTICS_FILL( fVerT(1-Olx,1-Oly,kUp), |
763 |
|
& diagName, k,1, 2,bi,bj, myThid) |
764 |
|
ENDIF |
765 |
|
#endif |
766 |
|
|
767 |
C-- End of K loop for vertical flux |
C-- End of K loop for vertical flux |
768 |
ENDDO |
ENDDO |
769 |
C-- end of if not.implicitAdvection block |
C-- end of if not.implicitAdvection block |