/[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.42 by heimbach, Tue Jul 18 03:23:50 2006 UTC revision 1.49 by heimbach, Fri Jul 27 22:18:57 2007 UTC
# Line 17  C !INTERFACE: ========================== Line 17  C !INTERFACE: ==========================
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.
# Line 33  C      - \Delta t \partial_r (w\theta^{( Line 33  C      - \Delta t \partial_r (w\theta^{(
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
# Line 80  C  myThid            :: thread number Line 80  C  myThid            :: thread number
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: ====================================================
# Line 270  C--   Make local copy of tracer array an Line 270  C--   Make local copy of tracer array an
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.
# Line 347  C       a) needed in overlap only Line 347  C       a) needed in overlap only
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
# Line 357  C-     Internal exchange for calculation Line 357  C-     Internal exchange for calculation
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
# Line 368  CADJ &     comlev1_bibj_k_gad_pass, key= Line 368  CADJ &     comlev1_bibj_k_gad_pass, key=
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
# Line 390  CADJ &     comlev1_bibj_k_gad_pass, key= Line 396  CADJ &     comlev1_bibj_k_gad_pass, key=
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    
# Line 411  C         in corner region) but safer to Line 417  C         in corner region) but safer to
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       &        )       &        )
# Line 423  C         in corner region) but safer to Line 430  C         in corner region) but safer to
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       &        )       &        )
# Line 441  C      do not only update the overlap Line 449  C      do not only update the overlap
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       &        )       &        )
# Line 504  C       a) needed in overlap only Line 513  C       a) needed in overlap only
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
# Line 514  C-     Internal exchange for calculation Line 523  C-     Internal exchange for calculation
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
# Line 532  CADJ &     comlev1_bibj_k_gad_pass, key= Line 541  CADJ &     comlev1_bibj_k_gad_pass, key=
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
# Line 554  CADJ &     comlev1_bibj_k_gad_pass, key= Line 569  CADJ &     comlev1_bibj_k_gad_pass, key=
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    
# Line 575  C         in corner region) but safer to Line 590  C         in corner region) but safer to
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       &        )       &        )
# Line 587  C         in corner region) but safer to Line 603  C         in corner region) but safer to
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       &        )       &        )
# Line 605  C      do not only update the overlap Line 622  C      do not only update the overlap
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       &        )       &        )
# Line 655  C-    explicit advection is done ; store Line 673  C-    explicit advection is done ; store
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
# Line 743  C- Interior interface : Line 761  C- Interior interface :
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
# Line 764  CADJ &     = comlev1_bibj_k_gad, key=kke Line 783  CADJ &     = comlev1_bibj_k_gad, key=kke
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
# Line 798  CADJ &     = comlev1_bibj_k_gad, key=kke Line 823  CADJ &     = comlev1_bibj_k_gad, key=kke
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

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.49

  ViewVC Help
Powered by ViewVC 1.1.22