/[MITgcm]/MITgcm/pkg/generic_advdiff/gad_advection.F
ViewVC logotype

Diff of /MITgcm/pkg/generic_advdiff/gad_advection.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.31 by heimbach, Wed Sep 29 04:53:30 2004 UTC revision 1.32 by jmc, Sat Dec 4 00:20:27 2004 UTC
# Line 332  CADJ &     comlev1_bibj_k_gad_pass, key= Line 332  CADJ &     comlev1_bibj_k_gad_pass, key=
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
# Line 371  C         in corner region) but safer to Line 371  C         in corner region) but safer to
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)
# Line 383  C         in corner region) but safer to Line 383  C         in corner region) but safer to
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)
# Line 401  C      do not only update the overlap Line 401  C      do not only update the overlap
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)
# Line 469  CADJ &     comlev1_bibj_k_gad_pass, key= Line 469  CADJ &     comlev1_bibj_k_gad_pass, key=
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
# Line 508  C         in corner region) but safer to Line 508  C         in corner region) but safer to
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)
# Line 520  C         in corner region) but safer to Line 520  C         in corner region) but safer to
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)
# Line 538  C      do not only update the overlap Line 538  C      do not only update the overlap
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)
# Line 578  C-    explicit advection is done ; store Line 578  C-    explicit advection is done ; store
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
# Line 668  CADJ &     = comlev1_bibj_k_gad, key=kke Line 668  CADJ &     = comlev1_bibj_k_gad, key=kke
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
# Line 696  CADJ &     = comlev1_bibj_k_gad, key=kke Line 696  CADJ &     = comlev1_bibj_k_gad, key=kke
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    

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.32

  ViewVC Help
Powered by ViewVC 1.1.22