C $Header: /u/gcmpack/MITgcm/pkg/salt_plume/salt_plume_tendency_apply_s.F,v 1.4 2007/12/21 02:54:34 atn Exp $
C $Name: $
#include "SALT_PLUME_OPTIONS.h"
CBOP 0
C !ROUTINE: SALT_PLUME_TENDENCY_APPLY_S
C !INTERFACE:
SUBROUTINE SALT_PLUME_TENDENCY_APPLY_S(
& iMin, iMax, jMin, jMax,
& bi,bj,kLev,myTime,myThid)
C !DESCRIPTION:
C Add salt_plume tendency terms to S tendency.
C Routine works for one level at a time.
C SaltPlume is the amount of salt rejected by ice while freezing;
C it is here redistributed to multiple vertical levels as per
C Duffy et al. (GRL 1999).
C !INPUT PARAMETERS:
IMPLICIT NONE
#include "SIZE.h"
#include "GRID.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "DYNVARS.h"
#include "SALT_PLUME.h"
C !INPUT PARAMETERS:
integer iMin, iMax, jMin, jMax, kLev, bi, bj, myThid
_RL myTime
CEOP
#ifdef ALLOW_SALT_PLUME
C !LOCAL VARIABLES:
integer i, j, kp1, two2
parameter(two2 = 2)
_RL plumefrac(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL plumekb(two2), SPdepth(two2), minusone
parameter(minusone = -1.)
do j=jMin,jMax
do i=iMin,iMax
C Penetrating saltplume fraction:
plumefrac(I,J) = 0. _d 0
plumekb(1)=abs(rF(klev))
plumekb(2)=abs(rF(klev+1))
SPdepth(1)=SaltPlumeDepth(i,j,bi,bj)
SPdepth(2)=SaltPlumeDepth(i,j,bi,bj)
CALL SALT_PLUME_FRAC(
I two2,minusone,SPdepth,
U plumekb,
I myTime, 1, myThid )
kp1 = klev+1
IF (klev.EQ.Nr) THEN
kp1 = klev
plumekb(2)=abs(rF(klev))
ENDIF
IF ( SaltPlumeDepth(i,j,bi,bj) .GT. -rF(kLev) ) THEN
plumefrac(I,J) = plumekb(1)*maskC(i,j,klev,bi,bj)
& -plumekb(2)*maskC(i,j,kp1, bi,bj)
gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
& +saltPlumeFlux(i,j,bi,bj)*plumefrac(I,J)*mass2rUnit
& *recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
ENDIF
ENDDO
ENDDO
#ifdef ALLOW_DIAGNOSTICS
IF ( useDiagnostics ) THEN
CALL DIAGNOSTICS_FILL (
& plumefrac,'PLUMEKB ',kLev,1,2,bi,bj,myThid )
ENDIF
#endif /* ALLOW_DIAGNOSTICS */
#endif /* ALLOW_SALT_PLUME */
return
end