Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:41:38 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
5174b865b3 Mart*0001 #include "KPP_OPTIONS.h"
08300bd1e7 Jean*0002 #ifdef ALLOW_GMREDI
cf0f4bb0af Jean*0003 # include "GMREDI_OPTIONS.h"
08300bd1e7 Jean*0004 #endif
5174b865b3 Mart*0005 
417c225d28 Jean*0006       SUBROUTINE KPP_TRANSPORT_PTR (
f8b74ffedb Jean*0007      I     iMin, iMax, jMin, jMax,
                0008      I     bi, bj, k, km1, iTr,
417c225d28 Jean*0009      O     df,
                0010      I     myTime, myIter, myThid )
88b144ae49 Jean*0011 C     *==========================================================*
                0012 C     | o SUBROUTINE KPP_TRANSPORT_PTR
                0013 C     |   Add non local KPP transport term (ghat) to diffusive
                0014 C     |   passive tracer flux.
                0015 C     *==========================================================*
                0016 C     | The nonlocal transport term is nonzero only for scalars
                0017 C     | in unstable (convective) forcing conditions.
c3cd6c250f Jean*0018 C     | Note: We do not have a specific KPP diffusion for a
88b144ae49 Jean*0019 C     |       passive tracer; use Salinity diffusion instead
                0020 C     | Note: KPPdiffKzS(-,k) is defined at the top of grid cell
                0021 C     |       k while KPPghat(i,j,k,bi,bj) is defined at the
                0022 C     |       bottom of grid cell k.
                0023 C     |       For K=1, KPPdiffKzS(-,k) = 0 which insures no flux
                0024 C     |       through the surface.
                0025 C     *==========================================================*
5174b865b3 Mart*0026       IMPLICIT NONE
                0027 
                0028 C     == GLobal variables ==
                0029 #include "SIZE.h"
                0030 #include "EEPARAMS.h"
                0031 #include "PARAMS.h"
                0032 #include "GRID.h"
                0033 #include "FFIELDS.h"
                0034 #include "KPP.h"
                0035 #include "KPP_PARAMS.h"
                0036 #ifdef ALLOW_PTRACERS
cf0f4bb0af Jean*0037 # include "PTRACERS_SIZE.h"
1f86e2e864 Jean*0038 c#include "PTRACERS_PARAMS.h"
cf0f4bb0af Jean*0039 # include "PTRACERS_FIELDS.h"
5174b865b3 Mart*0040 #endif
08300bd1e7 Jean*0041 #ifdef ALLOW_GMREDI
cf0f4bb0af Jean*0042 # include "GMREDI.h"
08300bd1e7 Jean*0043 #endif
4e66ab0b67 Oliv*0044 #ifdef ALLOW_LONGSTEP
cf0f4bb0af Jean*0045 # include "LONGSTEP.h"
                0046 #endif
                0047 #ifdef ALLOW_OFFLINE
                0048 # include "OFFLINE_SWITCH.h"
4e66ab0b67 Oliv*0049 #endif
08300bd1e7 Jean*0050 
5174b865b3 Mart*0051 C     == Routine arguments ==
f8b74ffedb Jean*0052 C     iMin,iMax :: Range of points for which calculation is done
                0053 C     jMin,jMax :: Range of points for which calculation is done
                0054 C     bi, bj,   :: tile indices
                0055 C     k, km1    :: current flux and KPP ghat level index
                0056 C     iTr       :: tracer index
                0057 C     df        :: Diffusive flux component work array.
                0058 C     myTime    :: Current time in simulation
                0059 C     myIter    :: Current iteration number in simulation
                0060 C     myThid    :: My Thread Id. number
                0061       INTEGER iMin, iMax, jMin, jMax
                0062       INTEGER bi, bj, k, km1, iTr
5174b865b3 Mart*0063       _RL df      (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
417c225d28 Jean*0064       _RL     myTime
                0065       INTEGER myIter
                0066       INTEGER myThid
5174b865b3 Mart*0067 
                0068 #if defined(ALLOW_KPP) && defined(KPP_GHAT) && defined(ALLOW_PTRACERS)
                0069 
                0070 C     == Local variables ==
f8b74ffedb Jean*0071 C     i, j      :: Loop counters
ce5b6f2183 Jean*0072       INTEGER i, j
08300bd1e7 Jean*0073       _RL tmpFac
be298a8815 Jean*0074 #ifndef ALLOW_OFFLINE
                0075       LOGICAL offlineLoadKPP
                0076       offlineLoadKPP = .FALSE.
                0077 #endif
88b144ae49 Jean*0078 
                0079 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
5174b865b3 Mart*0080 
cf0f4bb0af Jean*0081       IF ( useOffLine.AND.offlineLoadKPP ) THEN
08300bd1e7 Jean*0082 
ce5b6f2183 Jean*0083 C--   Note: in this case (offline) KPPghat array already contains
                0084 C           the product ghat*diffKzS which has been loaded from file
                0085         DO j=jMin,jMax
                0086          DO i=iMin,iMax
                0087           df(i,j) = - _rA(i,j,bi,bj)
                0088      &        *KPPghat(i,j,k,bi,bj)
f8b74ffedb Jean*0089      &        *surfaceForcingPTr(i,j,bi,bj,iTr)
ce5b6f2183 Jean*0090          ENDDO
                0091         ENDDO
5174b865b3 Mart*0092 
ce5b6f2183 Jean*0093       ELSE
08300bd1e7 Jean*0094 
ce5b6f2183 Jean*0095         IF ( useGMRedi .AND. KPP_ghatUseTotalDiffus ) THEN
                0096           tmpFac = 1. _d 0
                0097         ELSE
                0098           tmpFac = 0. _d 0
                0099         ENDIF
                0100         DO j=jMin,jMax
                0101          DO i=iMin,iMax
                0102           df(i,j) = - _rA(i,j,bi,bj)
                0103 #ifdef ALLOW_LONGSTEP
                0104      &        *( LS_KPPdiffKzS(i,j,k,bi,bj)
                0105 #ifdef ALLOW_GMREDI
                0106      &         + tmpFac*LS_Kwz(i,j,k,bi,bj)
                0107 #endif
                0108      &         )*LS_KPPghat(i,j,km1,bi,bj)
                0109 #else /* ALLOW_LONGSTEP */
                0110      &        *( KPPdiffKzS(i,j,k,bi,bj)
                0111 #ifdef ALLOW_GMREDI
                0112      &         + tmpFac*Kwz(i,j,k,bi,bj)
                0113 #endif
                0114      &         )*KPPghat(i,j,km1,bi,bj)
                0115 #endif /* ALLOW_LONGSTEP */
f8b74ffedb Jean*0116      &        *surfaceForcingPTr(i,j,bi,bj,iTr)
ce5b6f2183 Jean*0117          ENDDO
                0118         ENDDO
08300bd1e7 Jean*0119 
ce5b6f2183 Jean*0120       ENDIF
08300bd1e7 Jean*0121 
5174b865b3 Mart*0122 #endif /* ALLOW_KPP and KPP_GHAT and PTRACERS */
                0123 
                0124       RETURN
                0125       END