Linear remapping scheme for the ice thickness distribution
See Lipscomb, W. H. Remapping the thickness distribution of sea
ice. 2001, J. Geophys. Res., Vol 106, 13989-14000.
REVISION HISTORY:
authors: William H. Lipscomb, LANL Elizabeth C. Hunke, LANLINTERFACE:
module ice_itd_linearUSES:
use ice_model_size use ice_kinds_mod use ice_constants use ice_state use ice_itd use shr_sys_mod, only : shr_sys_abort
INTERFACE:
subroutine linear_itd(i,j,dhin,hin_old,hin,hsn)DESCRIPTION:
Ice thickness distribution scheme that shifts ice among categories.
The default scheme is linear remapping, which works as follows. See
Lipscomb (2001) for more details.
Using the thermodynamic "velocities", interpolate to find the
velocities in thickness space at the category boundaries, and
compute the new locations of the boundaries. Then for each
category, compute the thickness distribution function, g(h),
between hL and hR, the left and right boundaries of the category.
Assume g(h) is a linear polynomial that satisfies two conditions:
(1) The ice area implied by g(h) equals ain(n).
(2) The ice volume implied by g(h) equals ain(n)*hice(n).
Once g(h) is computed, compute the ice area and volume lying between the initial and new boundaries, and transfer this area and volume to the neighboring cell, thus restoring the initial boundary.
REVISION HISTORY:
authors: William H. Lipscomb, LANL Elizabeth C. Hunke, LANLUSES:
use ice_domain use ice_diagnostics use ice_calendarINPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: & i,j ! grid indices real (kind=dbl_kind), intent(in) :: & dhin(ncat) ! thickness change for remapping (m) &, hin_old(ncat) ! starting value of hin (m) real (kind=dbl_kind), intent(inout) :: & hin(ncat) ! ice thickness for each cat (m) &, hsn(ncat) ! snow thickness for each cat (m)
INTERFACE:
subroutine fit_line (n, hin, Hb, g0, g1, hL, hR, i,j)DESCRIPTION:
Fit g(h) with a line, satisfying area and volume constraints. To reduce rounding errors caused by large values of g0 and g1, we compute g(eta), where eta = h - hL.
REVISION HISTORY:
authors: William H. Lipscomb, LANL Elizabeth C. Hunke, LANLUSES:
INPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: & n ! thickness category for which g(h) computed real (kind=dbl_kind), intent(in) :: & hin(ncat) ! ice thickness for each cat (m) &, Hb(0:ncat) ! current category boundaries real (kind=dbl_kind), intent(out) :: & g0, g1 ! coefficients in linear equation for g(eta) &, hL ! min value of range over which g(h) > 0 &, hR ! max value of range over which g(h) > 0 integer (kind=int_kind), intent(in) :: & i,j
INTERFACE:
subroutine shift_ice (donor, daice, dvice, hin, i,j)DESCRIPTION:
Shift ice across category boundaries, conserving area, volume, and energy.
REVISION HISTORY:
authors: William H. Lipscomb, LANL Elizabeth C. Hunke, LANLUSES:
INPUT/OUTPUT PARAMETERS:
integer (kind=int_kind), intent(in) :: & donor(ncat-1) ! donor category index real (kind=dbl_kind), intent(inout) :: & daice(ncat-1) ! ice area transferred across boundary &, dvice(ncat-1) ! ice volume transferred across boundary real (kind=dbl_kind), intent(in) :: & hin(ncat) ! ice thickness for each cat (m) integer (kind=int_kind), intent(in) :: & i,j