Energy-conserving sea ice model
Driver for thermodynamics and associated changes to the itd
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, A.J. Weaver, M. Eby, 2001:
Simulating the ice-thickness distribution in a climate model,
J. Geophys. Res., 106, 2441-2464.
REVISION HISTORY:
author C. M. Bitz code heavily modified by Elizabeth C. Hunke, LANLINTERFACE:
module ice_therm_driverUSES:
use ice_kinds_mod use ice_model_size use ice_constants use ice_state use ice_flux use ice_diagnostics use ice_calendar
INTERFACE:
subroutine thermo_ratesDESCRIPTION:
compute thermodynamic growth rates and atmospheric fluxes
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_domain use ice_timers use ice_vthermo use ice_grid use ice_itd use ice_initINPUT/OUTPUT PARAMETERS:
INTERFACE:
subroutine thermo_itdDESCRIPTION:
Changes to ice thickness distribution associated with
thermodynamic growth rates, including lateral growth/melt
NOTE: ocean fluxes are initialized here
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_domain use ice_timers use ice_history use ice_grid use ice_itd use ice_itd_linear use ice_initINPUT/OUTPUT PARAMETERS:
INTERFACE:
subroutine init_column_diags(i,j,hfatm)DESCRIPTION:
initialize diagnostic and history variables
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_historyINPUT/OUTPUT PARAMETERS:
integer (kind=int_kind) :: i, j real (kind=dbl_kind), intent(out) :: & hfatm ! heat flx to ice-snow from atm (J/m**2)
INTERFACE:
subroutine init_vertical_profile(i,j,ei0,hin,hsn,tiz)DESCRIPTION:
initialize the vertical profile of ice properties
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_vthermo use ice_itdINPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: i,j real (kind=dbl_kind), intent(out) :: & ei0 ! initial energy in ice/snow (J/m**2) &, hin(ncat) ! ice thickness for each cat (m) &, hsn(ncat) ! snow thickness for each cat (m) &, tiz(0:nmax,ncat) ! temp of each layer for each cat (C)
INTERFACE:
subroutine init_frzmlt(i,j,Fbot,Fnew,Rside)DESCRIPTION:
Initialize ocean-ice heat fluxes: bottom and lateral
Assuming frzmlt is per grid box area
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_itdINPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: i, j real (kind=dbl_kind), intent(out) :: & Fbot ! heat flx to ice bottom, (W/m**2) &, Fnew ! heat flx to open water, (W/m**2) &, Rside ! fraction of ice that melts from side
INTERFACE:
subroutine lateral_growth_melt(i,j,Fnew,Rside,hin)DESCRIPTION:
frazil ice growth / lateral melt
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_vthermo use ice_history use ice_itdINPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: i,j real (kind=dbl_kind), intent(in) :: & Fnew ! heat flx to open water (W/m**2) &, Rside ! fraction of ice that melts from side real (kind=dbl_kind), intent(inout) :: & hin(ncat) ! ice thickness for each cat (m)
INTERFACE:
subroutine reduce_area(i,j,dhi1,hin,hsn)DESCRIPTION:
Reduce area when ice melts for special case of ncat=1
Use CSM 1.0-like method of reducing ice area when melting occurs: assume only half the ice volume change goes to thickness decrease, the other half to reduction in ice fraction
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_kinds_mod use ice_constants use ice_flux !! not necessary if rebin is called instead use ice_state use ice_itdINPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: i,j real (kind=dbl_kind), intent(in) :: & dhi1 ! melt at bottom and top plus sublimation (m) real (kind=dbl_kind), intent(inout) :: & hin(ncat) ! ice thickness for each cat (m) &, hsn(ncat) ! ice thickness for each cat (m)
INTERFACE:
subroutine conservation_check(i,j,ei0,hfatm,hfocn)DESCRIPTION:
Make sure ice properties are properly conserved
REVISION HISTORY:
authors: C.M.Bitz (UW) modified by: E.C.Hunke (LANL).USES:
use ice_itdINPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: i, j real (kind=dbl_kind), intent(in) :: & ei0 ! initial energy in ice/snow (J/m**2) &, hfatm ! heat flx to ice-snow from atm (J/m**2) &, hfocn ! heat flx to ice-snow from ocn (J/m**2)