Energy-conserving sea ice model
Routines to grow/melt ice and adjust temperature profile
See Bitz, C.M., and W.H. Lipscomb, 1999:
An energy-conserving thermodynamic model of sea ice,
J. Geophys. Res., 104, 15,669-15,677.
See Bitz, C.M., M.M. Holland, M. Eby, and A.J. Weaver, 2001: Simulating the ice-thickness distribution in a coupled climate model, J. Geophys. Res., 106, 2441-2464.
REVISION HISTORY:
author: C. M. Bitz, UWINTERFACE:
module ice_dhUSES:
use ice_kinds_mod use ice_constants use ice_itd
INTERFACE:
subroutine dh( dtsub, sal1d, tiz $ , tbot, hi, hs, fbot $ , fnet, condb, flh, ni $ , dhib, dhit, dhs, subi $ , subs, dhif, dhsf, qi $ , focn, i,j )DESCRIPTION:
Computes the thickness changes at the top and bottom
and adjusts layer energy of melt;
does not allow h less than 0.
Focn= actual flux of heat from the ocean layer under sea ice
(equal to fbot unless all the ice melts away);
compensates for rare case of melting entire slab through
REVISION HISTORY:
author: C. M. Bitz, UWUSES:
use ice_state use ice_diagnostics use shr_sys_mod, only : shr_sys_abortINPUT/OUTPUT PARAMETERS:
real (kind=dbl_kind), intent(in) :: & dtsub ! timestep &, sal1d (nmax+1) ! ice salinity (ppt) &, tiz (0:nmax) ! snow/ice internal temp (C) &, Tbot ! ice bottom in (C) &, hi ! initial ice thickness (m) &, hs ! initial snow thickness (m) &, fbot ! flx from ocean, potent. (W/m**2) &, fnet ! net flx at top srf incl. cond. flx (W/m**2) &, condb ! cond. flx at bot. (W/m**2) &, flh ! latent heat flx (w/m**2) integer (kind=int_kind), intent(in) :: & ni ! number of layers &, i,j ! grid location for debugging ! thickness changes from grow/melt (default) or sublimate/flooding real (kind=dbl_kind), intent(out) :: & dhib ! ice bot, dhib<0 if melt (m) &, dhit ! ice top, dhit<=0 (m) &, dhs ! snow top, dhit<=0 (m) &, subi ! ice top, subi<0 if sublimating (m) &, subs ! snow, subs<0 if sublimating (m) &, dhif ! ice top from flooding, dhif>0 (m) &, dhsf ! snow from flooding, dhsf<0 (m) &, qi(nmax) ! energy of melt of ice per unit vol. (J/m**3) &, focn ! actual flx of heat used from ocn (w/m**2)
INTERFACE:
subroutine freeboard(hs,hi,dhs,qs,dhsf,dhif,qiflood)DESCRIPTION:
Freeboard adjustment due to flooding ... snow-ice formation
REVISION HISTORY:
author: C. M. Bitz, UWUSES:
INPUT/OUTPUT PARAMETERS:
real (kind=dbl_kind), intent(in) :: & hs ! initial snow thickness (m) &, hi ! initial ice thickness (m) &, dhs ! snow top, dhit<=0 (m) &, qs ! energy of melt of snow per unit vol. (J/m**3) real (kind=dbl_kind), intent(out) :: & dhsf ! snow from flooding, dhsf<0 (m) &, dhif ! ice top from flooding, dhif>0 (m) &, qiflood ! energy of melt of flooded ice (W/m**2)
INTERFACE:
subroutine srfsub( qi, qs, delti, delts, ni, $ subi, subs, etop, enet )DESCRIPTION:
Compute the sea ice and snow thickness changes from sublimation/condensation
REVISION HISTORY:
author: C. M. Bitz, UWUSES:
INPUT/OUTPUT PARAMETERS:
real (kind=dbl_kind), intent(in) :: & qi (1:nmax), qs ! energy of melt of ice/snow per vol (J/m**3) &, delti(nmax), delts ! thickness of ice/snow layer (m) integer (kind=int_kind), intent(in) :: ni ! number of layers real (kind=dbl_kind), intent(out) :: & subi, subs ! subl/cond. amount for ice/snow (m) real (kind=dbl_kind), intent(inout) :: & etop ! energy avail to sub/cond ice/snow (J/m**2) &, enet ! energy needed to melt all ice/snow (J/m**2)
INTERFACE:
subroutine srfmelt( qi, qs, delti, delts, ni, $ dhit, dhs, etop )DESCRIPTION:
Melt ice/snow from the top srf
REVISION HISTORY:
author: C. M. Bitz, UWUSES:
INPUT/OUTPUT PARAMETERS:
real (kind=dbl_kind), intent(in) :: & qi (1:nmax), qs ! energy of melt of ice/snow per vol (J/m**3) &, delti(nmax), delts ! thickness of ice/snow layer (m) integer (kind=int_kind), intent(in) :: ni ! number of layers real (kind=dbl_kind), intent(out) :: & dhit ! ice thickness change (m) &, dhs ! snow thickness change (m) real (kind=dbl_kind), intent(inout) :: & etop ! energy avail to melt ice and snow (J/m**2)
INTERFACE:
subroutine botmelt( qi, qs, delti, delts, ni, $ dhib, dhs, ebot )DESCRIPTION:
Melt from bottom
REVISION HISTORY:
author: C. M. Bitz, UWUSES:
INPUT/OUTPUT PARAMETERS:
real (kind=dbl_kind), intent(in) :: & qi (1:nmax), qs ! energy of melt of ice/snow per vol (J/m**3) &, delti(nmax), delts ! thickness of ice/snow layer (m) integer (kind=int_kind), intent(in) :: ni ! number of layers real (kind=dbl_kind), intent(out) :: dhib ! ice thickness change (m) real (kind=dbl_kind), intent(inout) :: & dhs ! snow thickness change (m) &, ebot ! energy avail to melt ice and snow (J/m**2)
INTERFACE:
subroutine adjust(hi0,dhib,dhit,dhif,dhsf,qiflood,qigrow,ni,qi_tw)DESCRIPTION:
Adjusts temperature profile to account for changing the layer spacing due to growth/melt (incl. subl/cond, flooding). At start the energy of melting was computed after updating tiz from the heat equation. hi is the thickness prior to changes from dhib and dhit; hi_tw is the thickness after making these changes; dhib is less than 0 if there is melt at the bottom; dhit is less than 0 if there is melt at the top; generally _tw is a suffix to label the adjusted variables.
REVISION HISTORY:
author: C. M. Bitz, UWUSES:
INPUT/OUTPUT PARAMETERS:
real (kind=dbl_kind), intent(in) :: & hi0 ! initial ice thickness (m) &, dhib ! ice bot, dhib<0 if melt (m) &, dhit ! ice top, dhit<=0 (m) &, dhif ! ice top from flooding, dhif>0 (m) &, dhsf ! snow from flooding, dhsf<0 (m) &, qiflood ! qi for flooded ice (J/m**3) &, qigrow ! qi for ice growing on bot (J/m**3) integer (kind=int_kind), intent(in) :: ni real (kind=dbl_kind), intent(inout) :: & qi_tw(nmax) ! energy of melt of ice per unit vol. (J/m**3)
INTERFACE:
real function energ(Tmp ,sal)DESCRIPTION:
Compute the energy of melting per unit volume (J/m**3) relative to melting (negative quantity)
REVISION HISTORY:
author: C. M. Bitz, UWUSES:
INPUT/OUTPUT PARAMETERS:
real (kind=dbl_kind), intent(in) :: & Tmp ! midpt temperature of ice layer (C) &, sal ! midpt salinity of ice layer (ppt)