/[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.76 by rpa, Wed Jun 3 13:39:22 2015 UTC revision 1.77 by jmc, Sun Mar 13 01:44:02 2016 UTC
# Line 107  C  xA,yA         :: areas of X and Y fac Line 107  C  xA,yA         :: areas of X and Y fac
107  C  uTrans,vTrans :: 2-D arrays of volume transports at U,V points  C  uTrans,vTrans :: 2-D arrays of volume transports at U,V points
108  C  rTrans        :: 2-D arrays of volume transports at W points  C  rTrans        :: 2-D arrays of volume transports at W points
109  C  rTransKp      :: vertical volume transport at interface k+1  C  rTransKp      :: vertical volume transport at interface k+1
110    C  rTran3d       :: 3-D array of volume transport at W points
111    C  afr           :: 3-D array of vertical advective flux
112  C  af            :: 2-D array for horizontal advective flux  C  af            :: 2-D array for horizontal advective flux
113  C  afx           :: 2-D array for horizontal advective flux, x direction  C  afx           :: 2-D array for horizontal advective flux, x direction
114  C  afy           :: 2-D array for horizontal advective flux, y direction  C  afy           :: 2-D array for horizontal advective flux, y direction
# Line 135  c     _RS maskUp  (1-OLx:sNx+OLx,1-OLy:s Line 137  c     _RS maskUp  (1-OLx:sNx+OLx,1-OLy:s
137        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL vTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
138        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTrans  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
139        _RL rTransKp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rTransKp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
140          _RL rTran3d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
141          _RL afr     (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
142        _RL af      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL af      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
143        _RL afx     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL afx     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
144        _RL afy     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL afy     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
# Line 418  CADJ &     comlev1_bibj_k_gad_pass, key= Line 422  CADJ &     comlev1_bibj_k_gad_pass, key=
422            CALL GAD_OS7MP_ADV_X(     bi,bj,k, .TRUE., deltaTLev(k),            CALL GAD_OS7MP_ADV_X(     bi,bj,k, .TRUE., deltaTLev(k),
423       I             uTrans, uFld(1-OLx,1-OLy,k), maskLocW, localTij,       I             uTrans, uFld(1-OLx,1-OLy,k), maskLocW, localTij,
424       O             af, myThid )       O             af, myThid )
425  #endif          ELSEIF (advectionScheme.EQ.ENUM_PPM_NULL_LIMIT  .OR.
426         &          advectionScheme.EQ.ENUM_PPM_MONO_LIMIT  .OR.
427         &          advectionScheme.EQ.ENUM_PPM_WENO_LIMIT) THEN
428              CALL GAD_PPM_ADV_X( advectionScheme, bi, bj, k , .TRUE.,
429         I             deltaTLev(k), uFld(1-OLx,1-OLy,k), uTrans, localTij,
430         O             af, myThid )
431            ELSEIF (advectionScheme.EQ.ENUM_PQM_NULL_LIMIT  .OR.
432         &          advectionScheme.EQ.ENUM_PQM_MONO_LIMIT  .OR.
433         &          advectionScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN
434              CALL GAD_PQM_ADV_X( advectionScheme, bi, bj, k , .TRUE.,
435         I             deltaTLev(k), uFld(1-OLx,1-OLy,k), uTrans, localTij,
436         O             af, myThid )
437    #endif /* ndef ALLOW_AUTODIFF */
438          ELSE          ELSE
439           STOP 'GAD_ADVECTION: adv. scheme incompatibale with multi-dim'           STOP 'GAD_ADVECTION: adv. scheme incompatibale with multi-dim'
440          ENDIF          ENDIF
# Line 615  CADJ &     comlev1_bibj_k_gad_pass, key= Line 631  CADJ &     comlev1_bibj_k_gad_pass, key=
631            CALL GAD_OS7MP_ADV_Y(     bi,bj,k, .TRUE., deltaTLev(k),            CALL GAD_OS7MP_ADV_Y(     bi,bj,k, .TRUE., deltaTLev(k),
632       I             vTrans, vFld(1-OLx,1-OLy,k), maskLocS, localTij,       I             vTrans, vFld(1-OLx,1-OLy,k), maskLocS, localTij,
633       O             af, myThid )       O             af, myThid )
634  #endif          ELSEIF (advectionScheme.EQ.ENUM_PPM_NULL_LIMIT  .OR.
635         &          advectionScheme.EQ.ENUM_PPM_MONO_LIMIT  .OR.
636         &          advectionScheme.EQ.ENUM_PPM_WENO_LIMIT) THEN
637              CALL GAD_PPM_ADV_Y(advectionScheme, bi, bj, k , .TRUE.,
638         I             deltaTLev(k), vFld(1-OLX,1-OLy,k), vTrans, localTij,
639         O             af, myThid )
640            ELSEIF (advectionScheme.EQ.ENUM_PQM_NULL_LIMIT  .OR.
641         &          advectionScheme.EQ.ENUM_PQM_MONO_LIMIT  .OR.
642         &          advectionScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN
643              CALL GAD_PQM_ADV_Y(advectionScheme, bi, bj, k , .TRUE.,
644         I             deltaTLev(k), vFld(1-OLX,1-OLy,k), vTrans, localTij,
645         O             af, myThid )
646    #endif /* ndef ALLOW_AUTODIFF */
647          ELSE          ELSE
648           STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim'           STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim'
649          ENDIF          ENDIF
# Line 805  C--   End of K loop for horizontal fluxe Line 833  C--   End of K loop for horizontal fluxe
833  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
834    
835        IF ( .NOT.implicitAdvection ) THEN        IF ( .NOT.implicitAdvection ) THEN
836    
837    #ifndef ALLOW_AUTODIFF
838           IF (vertAdvecScheme.EQ.ENUM_PPM_NULL_LIMIT  .OR.
839         &     vertAdvecScheme.EQ.ENUM_PPM_MONO_LIMIT  .OR.
840         &     vertAdvecScheme.EQ.ENUM_PPM_WENO_LIMIT) THEN
841    C-- PPM-style vertical advection
842            DO k=1,Nr
843             IF (k.EQ.1) THEN
844    C-- vertical transport:  surface
845              DO j=1-OLy,sNy+OLy
846               DO i=1-OLx,sNx+OLx
847                rTran3d(i,j,k) = 0. _d 0
848               ENDDO
849              ENDDO
850             ELSE
851    C-- vertical transport: interior
852              DO j=1-OLy,sNy+OLy
853               DO i=1-OLx,sNx+OLx
854                rTran3d(i,j,k) = wFld(i,j,k)*rA(i,j,bi,bj)
855         &                      *deepFac2F(k)*rhoFacF(k)
856         &                      *maskC(i,j,k-1,bi,bj)
857               ENDDO
858              ENDDO
859             ENDIF
860            ENDDO
861    C-- calc. PPM vertical flux data
862            CALL GAD_PPM_ADV_R( vertAdvecScheme, bi, bj,
863         I               deltaTLev, wFld, rTran3d, localT3d,
864         O               afr, myThid )
865           ENDIF
866    
867           IF (vertAdvecScheme.EQ.ENUM_PQM_NULL_LIMIT  .OR.
868         &     vertAdvecScheme.EQ.ENUM_PQM_MONO_LIMIT  .OR.
869         &     vertAdvecScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN
870    C-- PQM-style vertical advection
871            DO k=1,Nr
872            IF (k.EQ.1) THEN
873    C-- vertical transport:  surface
874             DO j=1-OLy,sNy+OLy
875              DO i=1-OLx,sNx+OLx
876               rTran3d(i,j,k) = 0. _d 0
877              ENDDO
878             ENDDO
879            ELSE
880    C-- vertical transport: interior
881             DO j=1-OLy,sNy+OLy
882              DO i=1-OLx,sNx+OLx
883               rTran3d(i,j,k) = wFld(i,j,k)*rA(i,j,bi,bj)
884         &                 *deepFac2F(k)*rhoFacF(k)
885         &                 *maskC(i,j,k-1,bi,bj)
886              ENDDO
887             ENDDO
888            ENDIF
889            ENDDO
890    C-- calc. PQM vertical flux data
891            CALL GAD_PQM_ADV_R( vertAdvecScheme, bi, bj,
892         I               deltaTLev, wFld, rTran3d, localT3d,
893         O               afr, myThid )
894           ENDIF
895    #endif /* ndef ALLOW_AUTODIFF */
896    
897  C--   Start of k loop for vertical flux  C--   Start of k loop for vertical flux
898         DO k=Nr,1,-1         DO k=Nr,1,-1
899  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 884  C-    Compute vertical advective flux in Line 973  C-    Compute vertical advective flux in
973             CALL GAD_OS7MP_ADV_R(     bi,bj,k, deltaTLev(k),             CALL GAD_OS7MP_ADV_R(     bi,bj,k, deltaTLev(k),
974       I              rTrans, wFld(1-OLx,1-OLy,k), localT3d,       I              rTrans, wFld(1-OLx,1-OLy,k), localT3d,
975       O              fVerT(1-OLx,1-OLy,kUp), myThid )       O              fVerT(1-OLx,1-OLy,kUp), myThid )
976  #endif           ELSEIF (vertAdvecScheme.EQ.ENUM_PPM_NULL_LIMIT  .OR.
977         &           vertAdvecScheme.EQ.ENUM_PPM_MONO_LIMIT  .OR.
978         &           vertAdvecScheme.EQ.ENUM_PPM_WENO_LIMIT  .OR.
979         &           vertAdvecScheme.EQ.ENUM_PQM_NULL_LIMIT  .OR.
980         &           vertAdvecScheme.EQ.ENUM_PQM_MONO_LIMIT  .OR.
981         &           vertAdvecScheme.EQ.ENUM_PQM_WENO_LIMIT) THEN
982    C- copy level from 3d flux data
983               DO j = 1-OLy,sNy+OLy
984                DO i = 1-OLx,sNx+OLx
985                 fVerT(i,j,kUp) = afr(i,j,k)
986                ENDDO
987               ENDDO
988    #endif /* ndef ALLOW_AUTODIFF */
989           ELSE           ELSE
990            STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim'            STOP 'GAD_ADVECTION: adv. scheme incompatibale with mutli-dim'
991           ENDIF           ENDIF

Legend:
Removed from v.1.76  
changed lines
  Added in v.1.77

  ViewVC Help
Powered by ViewVC 1.1.22