/[MITgcm]/MITgcm/pkg/kpp/kpp_transport_s.F
ViewVC logotype

Diff of /MITgcm/pkg/kpp/kpp_transport_s.F

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

revision 1.6.2.1 by jmc, Fri Mar 30 23:28:32 2001 UTC revision 1.18 by heimbach, Thu May 22 13:11:14 2014 UTC
# Line 2  C $Header$ Line 2  C $Header$
2  C $Name$  C $Name$
3    
4  #include "KPP_OPTIONS.h"  #include "KPP_OPTIONS.h"
5    #ifdef ALLOW_GMREDI
6    #include "GMREDI_OPTIONS.h"
7    #endif
8    #ifdef ALLOW_SALT_PLUME
9    #include "SALT_PLUME_OPTIONS.h"
10    #endif
11    
12        subroutine KPP_TRANSPORT_S (        SUBROUTINE KPP_TRANSPORT_S (
13       I     iMin,iMax,jMin,jMax,bi,bj,k,km1,       I     iMin,iMax,jMin,jMax,bi,bj,k,km1,
14       I     KappaRS,       O     df,
15       U     df )       I     myTime, myIter, myThid )
16  C     /==========================================================\  C     *==========================================================*
17  C     | o SUBROUTINE KPP_TRANSPORT_S                             |  C     | o SUBROUTINE KPP_TRANSPORT_S
18  C     |   Add non local KPP transport term (ghat) to diffusive   |  C     |   Add non local KPP transport term (ghat) to diffusive
19  C     |   salinity flux.                                         |  C     |   salinity flux.
20  C     |==========================================================|  C     *==========================================================*
21  C     | The nonlocal transport term is nonzero only for scalars  |  C     | The nonlocal transport term is nonzero only for scalars
22  C     | in unstable (convective) forcing conditions.             |  C     | in unstable (convective) forcing conditions.
23  C     | Note: KappaRS(i,j,k) is defined at the top of grid cell  |  C     | Note: KPPdiffKzS(-,k) is defined at the top of grid cell
24  C     |       k while KPPghat(i,j,k,bi,bj) is defined at the     |  C     |       k while KPPghat(i,j,k,bi,bj) is defined at the
25  C     |       bottom of grid cell k.                             |  C     |       bottom of grid cell k.
26  C     |       For K=1, KappaRS(i,j,k) = 0 which insures no flux  |  C     |       For K=1, KPPdiffKzS(-,k) = 0 which insures no flux
27  C     |       through the surface.                               |  C     |       through the surface.
28  C     \==========================================================/  C     *==========================================================*
29        IMPLICIT NONE        IMPLICIT NONE
30    
31  C     == GLobal variables ==  C     == GLobal variables ==
32  #include "SIZE.h"  #include "SIZE.h"
 #include "DYNVARS.h"  
33  #include "EEPARAMS.h"  #include "EEPARAMS.h"
34  #include "PARAMS.h"  #include "PARAMS.h"
35  #include "GRID.h"  #include "GRID.h"
36  #include "FFIELDS.h"  #include "FFIELDS.h"
37  #include "KPP.h"  #include "KPP.h"
38  #include "KPP_PARAMS.h"  #include "KPP_PARAMS.h"
39    #ifdef ALLOW_GMREDI
40    # include "GMREDI.h"
41    #endif
42    #ifdef ALLOW_SALT_PLUME
43    # include "SALT_PLUME.h"
44    #endif
45    
46  C     == Routine arguments ==  C     == Routine arguments ==
47  C     iMin,iMax,jMin,  - Range of points for which calculation  C     iMin,iMax,jMin,  - Range of points for which calculation
48  C     jMax,bi,bj,k,km1   results will be set.  C     jMax,bi,bj,k,km1   results will be set.
 C     KappaRS          - Total diffusion in vertical for S.  
49  C     df               - Diffusive flux component work array.  C     df               - Diffusive flux component work array.
50    C     myTime :: Current time in simulation
51    C     myIter :: Current iteration number in simulation
52    C     myThid :: My Thread Id. number
53        INTEGER iMin,iMax,jMin,jMax,bi,bj,k,km1        INTEGER iMin,iMax,jMin,jMax,bi,bj,k,km1
       _RL KappaRS(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)  
54        _RL df     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL df     (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
55          _RL     myTime
56          INTEGER myIter
57          INTEGER myThid
58    
59  #if defined(ALLOW_KPP) && defined(KPP_GHAT)  #if defined(ALLOW_KPP) && defined(KPP_GHAT)
60    
61  C     == Local variables ==  C     == Local variables ==
62  C     I, J - Loop counters  C     I, J - Loop counters
63        INTEGER I, J        INTEGER I, J
64    #ifdef ALLOW_GMREDI
65          _RL tmpFac
66    #endif
67    #ifdef ALLOW_SALT_PLUME
68          _RL tmpFac1
69    #endif
70    
71    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
72    
73    catn: will not apply if use SALT_PLUME_VOLUME because volumes
74    c      will be exchanged
75    #ifdef ALLOW_SALT_PLUME
76          IF ( useSALT_PLUME ) THEN
77    # ifndef SALT_PLUME_VOLUME
78             tmpFac1 = 1. _d 0
79    # else
80             tmpFac1 = 0. _d 0
81    # endif /* ndef SALT_PLUME_VOLUME */
82          ELSE
83             tmpFac1 = 0. _d 0
84          ENDIF
85    #endif /* ALLOW_SALT_PLUME */
86    
87    #ifdef ALLOW_GMREDI
88    
89          IF ( useGMRedi .AND. KPP_ghatUseTotalDiffus ) THEN
90            tmpFac = 1. _d 0
91          ELSE
92            tmpFac = 0. _d 0
93          ENDIF
94          DO j=jMin,jMax
95           DO i=iMin,iMax
96            df(i,j) = - _rA(i,j,bi,bj)
97         &        *( KPPdiffKzS(i,j,k,bi,bj) + tmpFac*Kwz(i,j,k,bi,bj) )
98         &        *KPPghat(i,j,km1,bi,bj)
99         &        *( surfaceForcingS(i,j,bi,bj)
100    #ifdef ALLOW_SALT_PLUME
101         &          + tmpFac1*saltPlumeFlux(i,j,bi,bj)*recip_rhoConst
102         &          *(1.-KPPplumefrac(i,j,bi,bj))
103    #endif /* ALLOW_SALT_PLUME */
104         &         )
105           ENDDO
106          ENDDO
107    
108    #else /* ALLOW_GMREDI */
109    
110        DO j=jMin,jMax        DO j=jMin,jMax
111         DO i=iMin,iMax         DO i=iMin,iMax
112          df(i,j) = df(i,j) - _rA(i,j,bi,bj) *          df(i,j) = - _rA(i,j,bi,bj)
113       &         KappaRS(i,j,k) * KPPghat(i,j,km1,bi,bj) * delZ(1) *       &        *KPPdiffKzS(i,j,k,bi,bj)
114       &         SurfaceTendencyS(i,j,bi,bj)       &        *KPPghat(i,j,km1,bi,bj)
115         &        *( surfaceForcingS(i,j,bi,bj)
116    #ifdef ALLOW_SALT_PLUME
117         &          + tmpFac1*saltPlumeFlux(i,j,bi,bj)*recip_rhoConst
118         &          *(1.-KPPplumefrac(i,j,bi,bj))
119    #endif /* ALLOW_SALT_PLUME */
120         &         )
121         ENDDO         ENDDO
122        ENDDO        ENDDO
123    
124    #endif /* ALLOW_GMREDI */
125    
126  #endif /* ALLOW_KPP and KPP_GHAT */  #endif /* ALLOW_KPP and KPP_GHAT */
127    
128        RETURN        RETURN

Legend:
Removed from v.1.6.2.1  
changed lines
  Added in v.1.18

  ViewVC Help
Powered by ViewVC 1.1.22