Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UM Damage Evolution #28

Open
wants to merge 10 commits into
base: master
Choose a base branch
from

Conversation

morgwhitcomb
Copy link

This branch adds damage evolution to CISM following Eq 27 in Bassis and Ma 2015, along with new associated input options. Numerical verification is accomplished via a manufactured damage solution and a new ice tongue test case, the details of which are found in tests/tongue/doc/README.tex. The test case also required the addition of the new const_thk_mask variable, used to hold nonzero thicknesses constant in time.

This commit adds the long-wavelength, dimensional damage evolution equation from Bassis and Ma 2015 to glissade_calving under the marine_margin=CALVING_DAMAGE option. Currently, this form of damage is a direct replacement of the simple effective stress scheme that existed there previously, but a later commit will add i/o options to allow for toggling between the two.

The damage equation includes a term for the total melt rate, which I have implemented using -acab. I suspect that this will need to be updated to accommodate for the current state of basal melt parameterizations in the model, but I am not up-to-date on that and have coded what I know to exist.
This commit adds several new input options associated with damage-based calving:
* damage_src - Integer specifying the source term used to solve for damage
  - 0 = no damage source, 1 (default) = damage source based on the effective stress (what was previously already implemented), 2 = damage source from eq 27 in Bassis and Ma 2015 (what has been implemented here)
* damage_floor - Integer used to set the lower-limit value to which damage is constrained
  - 0 (default) = zero damage floor, 1 = Nye zero-stress damage floor (currently due to only basal crevasses)
* damage_advect - Boolean used to turn damage advection on (default) or off
* damage_manufactured - Boolean used to toggle a manufactured solution for damage (default is off)
  - This is entirely a diagnostic option used for verification of the damage field in an ice tongue test case; the specific details of how this works will be added in a future commit, but in essence, when this is toggled on, damage is modified by a forcing term that allows the user to compare it to a known solution.

In addition to the above input options, two new diagnostic variables have been added:
* const_thk_mask - Similar to no_advance_mask, but it holds the thickness constant in time in the specified grid cells
  - This is used in the ice tongue test case (to be committed later) to enforce a constant grounding line flux.
* damage_init - Holds the initial damage field specified (or not specified) in the input file
  - When damage_manufactured is true, we need this information to compute the forcing term. There may be a more elegant way to access this information in glissade_calving that I do not know about, in which case this variable would be unnecessary.

Finally, this commit also adds damage calving support using the already-existing lateral calving rate conversion and subgrid calving front parameterization scheme. When the latter is active, damage leads to calving, and when it is inactive, damage does not calve (treating it entirely as a scalar field layered on top of the ice).
This commit adds a test case designed for damage testing that constructs a one-dimensional, freely-floating ice tongue following the analytic equations developed in Chapter 5.5 of van der Veen [2013]. The test case itself is housed in tests/tongue and contains an executable python script (ice_tongue.py), a CISM configuration file (ice_tongue.config), and documentation in the tongue/doc folder (which also describes the details of the new damage_manufactured configuration option). In addition, the python script can be toggled to instead construct a two-dimensional ice tongue confined to a lateral embayment.

The ice tongue geometries pre-loaded within this test case are:
- Erebus
- The unconfined portion of Drygalski
- Idealized Amery
- Idealized Ross
General:
- Damage should now never be larger than one

In the ice tongue test case:
- Damage confinement is now enforced for Amery and Ross when using a restart file
- The bedrock elevation has been lowered slightly to fix pockets of zero damage downstream from the grounding line for Amery and Ross
Bringing the damage branch up to date with master
Fixed the lateral sizes of Ross and Amery in the table of the ice tongue test case documentation
…grid calving front scheme

Fixed a variety of bugs in the Bassis and Ma damage evolution scheme, both in the physics and in the numerical discretization:
- Damage is now converted to crevasse depth before being advected and evolved, to match the form of the advective equation solved by the incremental remapping scheme; it is then converted back to damage afterwards
- Adjusted the damage source term, manufactured forcing, and Nye's zero stress criterion to match the aforementioned crevasse depth parameterization
- Updated the ice tongue test case documentation to match the reformulated damage evolution parameterization
- Replaced thck with thck_old in the damage evolution scheme to be consistent with the forward Euler discretization
- Removed thck_eff, which only existed because of a misinterpretation of how the subgrid calving front scheme works
- Fixed the linear extrapolation routine at the calving front for the velocities and viscosity, and added one for damage at the grounding line (which the model currently does not have the capacity to handle)
- Identified and corrected loop indexing bugs in the damage evolution scheme and added the appropriate calls to parallel_halo

In addition, support was added for the subgrid calving front scheme to the manufactured damage solver.

To-do: Fix discrepancy in the damage field near the grounding line.
- Fixed a bug that caused a segmentation fault when the Bassis and Ma damage source term was deactivated
- Small tweak to the ice tongue test case documentation file for consistency
Reverting changes from the physics/discretization commit 0b33606, such that damage is no longer converted to crevasse depth during the course of the damage evolution routine.

Also, this commit extends the unstaggered velocity extrapolation procedure to occur at the grounding line in addition to the calving front, where there are not enough staggered grid points for the velocity to be defined. Some of this procedural extension involves minor bugfixes in identifying the correct points within the domain.
Completed the commit reversion by fixing the Nye zero stress criterion for damage.

Also fixed an issue with the thickness field never evolving, and an issue with the way the bedrock topography was initialized by ice_tongue.py for 2D ice shelves.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant