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, LANL
INTERFACE:
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, LANL
USES:
use ice_domain
use ice_diagnostics
use ice_calendar
INPUT/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, LANL
USES:
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, LANL
USES:
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