C $Header: /u/gcmpack/MITgcm/pkg/salt_plume/SALT_PLUME.h,v 1.10 2014/05/21 10:46:03 heimbach Exp $
C $Name:  $

#ifdef ALLOW_SALT_PLUME

C--   SALT_PLUME parameters
C     Find surface where the potential density (ref.lev=surface) is
C     larger than surface density plus SaltPlumeCriterion.

C     SaltPlumeSouthernOcean: TRUE  = apply salt plume globally
C                             FALSE = apply salt plume in Arctic Ocean only
      LOGICAL SaltPlumeSouthernOcean
#ifdef SALT_PLUME_SPLIT_BASIN
      LOGICAL SaltPlumeSplitBasin
#endif
      COMMON /SALT_PLUME_PARAMS_L/ SaltPlumeSouthernOcean
#ifdef SALT_PLUME_SPLIT_BASIN
     &      , SaltPlumeSplitBasin
#endif

C     CriterionType: 1=delta_rho, 2=drhodz, default is 1
C     PlumeMethod: method of distributing salt plume vertically
C       1=power, 2=exp, 3=overshoot, 5=dump_at_top, 6=reverse of 1
C       default is 1
C     Npower: choices of distributing salt uniformly (0), linear (1),
C       or higher power (Npower>1); default is 0 when PlumeMethod = 1
      INTEGER CriterionType, PlumeMethod
#ifdef SALT_PLUME_SPLIT_BASIN
     & , Npower(2)
#else
     & , Npower
#endif
      COMMON /SALT_PLUME_PARAMS_I/ CriterionType, PlumeMethod, Npower

C     SaltPlumeCriterion
C       for CriterionType=1, default is 0.4 kg/m^3 of Duffy et al 1999
C       for CriterionType=2, default is 0.005 kg/m^3/m
C     SPovershoot: overshooting depth of penetrating salt plume,
C       so that 1.0 = no-overshoot, 1.2 = 20% overshoot.
C       default is 1.0
C     SPsalFRAC: fraction of the salt by-product of seaice growth (not melt) that
C       will be re-distributed vertically according to the salt_plume_frac.F
C       Its default is 1. (for 100% effect), and its range is [0. 1.]
C     SPinflectionPoint: the inflection point of a nonlinear function 
C       f(AREA) controlling saltPlumeFlux. f(AREA) is a logistic curve
C       (sigmoid) with range [0. 1.] and f(SPinflectionPoint) == 0.5.
C       Usage: pkg/salt_plume activates when AREA>=SPinflectionPoint.
C       To assure only narrow leads generate plumes: 
C       set SPinflectionPoint >= 0.8.
C     SPalpha :: fraction of grid volume designated to be brine, [0. 1.]
C       If grid cell 18km x 18km x 10m, take SPalpha=0.001 gives
C       volume of 0.001*drF(1)*[dx*dy] of brine. Thus SPbrineSalt
C       can be calc as adding SaltPlumeFlux into this fractional vol.
C       Default: 0.008 -> SPbrineSalt ~37 if SSS is ~32.
C     SPbrineSconst :: salinity of brine pocket [psu]

      _RL SaltPlumeCriterion, SPovershoot
#ifdef SALT_PLUME_SPLIT_BASIN
     &   , SPsalFRAC(2)
#else /* SALT_PLUME_SPLIT_BASIN */
     &   , SPsalFRAC
#endif /* SALT_PLUME_SPLIT_BASIN */
#ifdef SALT_PLUME_VOLUME
     &   , SPbrineSconst, SPbrineSaltmax
#endif /* SALT_PLUME_VOLUME */ 
#ifdef SALT_PLUME_IN_LEADS
     &   , SPinflectionPoint
#endif /* SALT_PLUME_IN_LEADS */
      COMMON /SALT_PLUME_PARAMS_R/
     &   SPsalFRAC, SaltPlumeCriterion, SPovershoot
#ifdef SALT_PLUME_VOLUME
     &   , SPbrineSconst, SPbrineSaltmax
#endif /* SALT_PLUME_VOLUME */
#ifdef SALT_PLUME_IN_LEADS
     &   , SPinflectionPoint
#endif
C--   SALT_PLUME 2-dim. fields
C     SaltPlumeDepth :: depth of penetration of salt plumes
C                       rejected during sea ice growth
C     saltPlumeFlux :: Net downward salt flux in psu.kg/m^2/s
C              Note: a) only used when salty sea-ice forms.
C                    b) units: when salinity (unit= psu) is expressed
C                       in g/kg, saltPlumeFlux unit becomes g/m^2/s.
C              > 0 for increasing in SSS.
C              Southwest C-grid tracer point
C     dSPvolSurf2kLev :: downward volume frac from klev=1 associated w/ saltPlumeFlux
C     dSPvolBelow2kLev:: upward volume frac from grid below (RETIRED)
C     dSPvolkLev2Above:: upward volume frac to grid above
C     SPbrineVolFlux  :: brine Vol associated w/ SPbrineSconst & saltPlumeFlux
C     SPforcingS      :: 3D forcingS associated w/ saltPlumeFlux [g/m2/s]
C     SPforcingT      :: 3D forcingT associated w/ saltPlumeFlux [W/m2]
C     SPkBottom       :: bottom kLev associated with SaltPlumeDepth

      _RL SaltPlumeDepth (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
      _RL  saltPlumeFlux (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
#ifdef SALT_PLUME_VOLUME
      _RL SPbrineVolFlux (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
      _RL SPforcS1       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
      _RL SPforcT1       (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
      _RL dSPvolSurf2kLev (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
     &   ,dSPvolkLev2Above(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1,nSx,nSy)
     &   ,SPforcingS      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
     &   ,SPforcingT      (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
     &   ,SPplumek        (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+1,nSx,nSy)
#endif
      COMMON /DYNVARS_SALT_PLUME/ SaltPlumeDepth
#ifdef SALT_PLUME_VOLUME
     &    ,SPbrineVolFlux,SPforcS1,SPforcT1
      COMMON /FFIELDS_SaltPlumeVol/
     &     dSPvolSurf2kLev,dSPvolkLev2Above
     &     ,SPforcingS,SPforcingT
     &     ,SPplumek
#endif
      COMMON /FFIELDS_saltPlumeFlux/ saltPlumeFlux
#endif /* ALLOW_SALT_PLUME */