C $Header: /u/gcmpack/MITgcm/pkg/salt_plume/salt_plume_forcing_surf.F,v 1.5 2014/05/21 10:46:03 heimbach Exp $
C $Name:  $

#include "SALT_PLUME_OPTIONS.h"

CBOP
C     !ROUTINE: SALT_PLUME_FORCING_SURF
C     !INTERFACE:
      SUBROUTINE SALT_PLUME_FORCING_SURF(
     I                            bi, bj, iMin, iMax, jMin, jMax,
     I                            myTime,myIter,myThid )

C     !DESCRIPTION: \bv
C     *==========================================================*
C     | S/R SALT_PLUME_FORCING_SURF
C     | o saltPlume is the amount of salt rejected by ice while freezing;
C     |   it is here subtracted from surfaceForcingS and will be redistributed
C     |   to multiple vertical levels later on as per Duffy et al. (GRL 1999)
C     *==========================================================*
C     \ev

C     !USES:
      IMPLICIT NONE
C     == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "FFIELDS.h"
#include "DYNVARS.h"
#include "SALT_PLUME.h"

C     !INPUT PARAMETERS:
C     bi,bj                :: tile indices
C     myTime               :: model time
C     myIter               :: time-step number
C     myThid               :: thread number
      INTEGER bi, bj, iMin, iMax, jMin, jMax
      _RL myTime
      INTEGER myIter
      INTEGER myThid
CEOP

#ifdef ALLOW_SALT_PLUME
C     !LOCAL VARIABLES:
C     i,j                  :: loop indices
C     ks                   :: surface level index
      INTEGER i, j, ks
      IF ( usingPCoords ) THEN
         ks = Nr
      ELSE
         ks = 1
      ENDIF

      DO j = jMin, jMax
       DO i = iMin, iMax
#ifdef SALT_PLUME_VOLUME
        SPforcS1(i,j,bi,bj)=SPbrineVolFlux(i,j,bi,bj)
     &   *SPbrineSconst*rhoConst
        SPforcT1(i,j,bi,bj)=SPbrineVolFlux(i,j,bi,bj)
     &   *theta(i,j,1,bi,bj)*rhoConst
     &   *HeatCapacity_Cp

Cunits: surfaceForcingT [Kelvin.m/s], surfaceForcingS [psu.m/s]
C SPforcS1 has same unit as saltPlumeFlux [g/m2/s]=[g/kg kg/m2/s]
C SPforcT1: [W/m2]
        surfaceForcingS(i,j,bi,bj) = surfaceForcingS(i,j,bi,bj)
     &      - SPforcS1(i,j,bi,bj) * mass2rUnit
        surfaceForcingT(i,j,bi,bj) = surfaceForcingT(i,j,bi,bj)
     &      - SPforcT1(i,j,bi,bj) * mass2rUnit / HeatCapacity_Cp
#else /* SALT_PLUME_VOLUME */
        surfaceForcingS(i,j,bi,bj) = surfaceForcingS(i,j,bi,bj)
     &       - saltPlumeFlux(i,j,bi,bj) * mass2rUnit
#endif /* SALT_PLUME_VOLUME */
       ENDDO
      ENDDO
#endif /* ALLOW_SALT_PLUME */

      RETURN
      END