Ice Front Migration (Level Set Method)
Physical basis
ISSM tracks the position of the calving front implicitly, using a level-set method [Bondzio2016]. The ice front is defined as the zero contour of a level-set function \(\phi\), with the convention:
- \(\phi<0\) inside the ice domain
- \(\phi>0\) outside the ice domain (open ocean/no ice)
- \(\phi=0\) at the ice front
The ice front is advected by solving the following transport equation for \(\phi\):
\[\frac{\partial \phi}{\partial t} + {\bf v_f}\cdot\nabla \phi = 0\]where \({\bf v_f}\) is the frontal migration velocity, obtained by combining the horizontal ice velocity \({\bf v}\) with the calving rate \(c\) (see the Calving page) and the frontal melt rate \(m\), both acting outward, normal to the front:
\[{\bf v_f} = {\bf v} - \left(c + m\right)\frac{\nabla \phi}{\left|\nabla \phi\right|}\]This equation is solved with a Streamline Upwind Petrov–Galerkin (SUPG)-stabilized finite element scheme. Because \(\phi\) can become distorted by the advection (steepening or flattening away from a signed distance function), it is periodically reset to a signed distance function away from the front (reinitialization).
At every time step during which the moving front module is active, ISSM:
- Computes depth-averaged velocities (for 2D vertical/3D meshes) and smooths the gradient of \(\phi\) to get a well-defined outward normal at the front
- Extrapolates velocity, thickness, and temperature/enthalpy fields into the “no ice” region ahead of the front, so that these fields remain well defined as the front advances
- Computes the calving rate (
md.calving) and the frontal melt/undercutting rate (md.frontalforcings) - Computes the frontal migration velocity \({\bf v_f}\) and solves the level-set advection equation above
- Optionally removes floating icebergs that have been detached from the main ice body, to avoid spurious rigid-body motion
- Reinitializes the level-set function to a signed distance function, either after killing icebergs or every
reinit_frequencytime steps - Updates the mask of vertices/elements that contain ice for the next time step
Model parameters
This module is controlled through the md.levelset class. The following fields can be displayed by running:
>> md.levelset
md.levelset.stabilization: stabilization scheme used to solve the level-set advection equation- 0: no stabilization (least stable, least diffusive)
- 1: artificial diffusivity
- 2: streamline upwinding
- 5: SUPG (default, most accurate but can be unstable in some applications)
md.levelset.spclevelset: prescribed values of the level-set function (NaNwhere unconstrained), which can be used to fix parts of the ice front in place or force a given calving front position/time seriesmd.levelset.reinit_frequency: number of time steps between two reinitializations of the level-set function as a signed distance function (default: 10)md.levelset.kill_icebergs: if 1, detached floating ice (icebergs) is removed from the domain at each time step to prevent unconstrained rigid-body motion (default: 1)md.levelset.migration_max: maximum allowed migration rate of the ice front [m/a], used to cap unrealistically fast advance or retreatmd.levelset.fe: finite element used to discretize the level-set function,'P1'(default) or'P2'
Running a simulation
To turn on ice front migration in a transient simulation, activate the moving front module:
>> md.transient.ismovingfront = 1;
You must also select a calving law (see the Calving page) and, if applicable, a frontal melt/undercutting parameterization (md.frontalforcings):
>> md.calving = calvingvonmises();
>> md.frontalforcings = frontalforcings();
>> md.frontalforcings.meltingrate = zeros(md.mesh.numberofvertices, 1);
Finally, run the transient simulation:
>> md = solve(md, 'Transient');
References
- J. H. Bondzio, H. Seroussi, M. Morlighem, T. Kleiner, M. Ruckamp, A. Humbert, and E. Y. Larour. Modelling calving front dynamics using a level-set method: application to Jakobshavn Isbrae, West Greenland. Cryosphere, 10(2):497-510, 2016.