The Design Document page provides a description of the algorithms, implementation and planned testing including unit, verification, validation and performance testing. Please read Step 1.3 Performance Expectations that explains feature documentation requirements from the performance group point of view.
Design Document
In the table below 4.Equ means Equations and Algorithms, 5.Ver means Verification, 6.Perf - Performance, 7. Val - Validation, - competed, - in progress, - not done
Title: O_27_LI Moving Ice Sheet and Sea Ice Boundaries in Coupler
Requirements and Design
ACME Ocean and Ice Group
Date: 2015-9-23
Summary
Requirements
Requirement: Retreat of the ice shelf
Date last modified: 2015/09/22
Contributors: Elizabeth Hunke
Retreat of the ice shelf frees up space that sea ice can then occupy.
Requirement: Advance of the ice shelf
Date last modified: 2015/09/22
Contributors: Elizabeth Hunke
An advancing ice shelf displaces sea ice from a portion of the ocean surface. In this case, the ice shelf may advance over a small fraction of a grid cell, or, if the coupling time step is particularly long, it may advance over a whole grid cell or more.
The sea ice that was in the area A of ocean surface that is now covered by the ice shelf must be moved. During that process, it could also be compressed (i.e. ridged). Considerations include
i. conservation of thermal energy and the total mass of water and salt by the coupled model
ii. invoking physically realistic processes
iii. minimizing the complexity of the code changes, especially with regard to the mechanics of the coupler
iv. minimizing errors due to lags associated with the coupling time step
v. as the coupling time step becomes infinitely small, effects of the simulated processes should approach reality.
Algorithmic Formulations
Design solution: Retreat of the ice shelf
Date last modified: 2015/09/22
Contributors: Elizabeth Hunke
The area of retreated land ice becomes open water. During the next time step, sea ice can occupy this open water using its normal dynamics (freezing and/or advection).
Design solution: Advance of the ice shelf
Date last modified: 2015/09/22
Contributors: Elizabeth Hunke
The most fundamental change needed for the sea ice model is the addition of a gridded variable, the land-ice area fraction. This field is already defined and used for the iceberg model (bice in CICE); it essentially reduces the ocean grid cell area available for sea ice coverage. It can be similarly defined and used for ice shelves, and it will make future incorporation of the iceberg model simpler. All of the options below require this field to be passed through the coupler from the land ice model to the sea ice model; grid remapping will be necessary.
CICE with icebergs currently uses sea ice ridging to make room for bergs when they are added (initialization and calving) and to allow for iceberg motion within the sea ice pack. For ice shelf motion into sea-ice-covered areas, we only need to utilize the former capability. This is handled as part of subroutine calve_bergs in the current iceberg code within CICE.
Coupling
The coupler will send to the sea ice model the fraction of an ocean grid cell covered by ice shelf, bice. The fractions of sea ice area (aice), ice shelf area and open water area within a grid cell effectively satisfy aice + bice + open water area = 1 following ridging, and for bice=0, results should be BFB with the code prior to adding ice shelves. Note that for compatibility in other code functions, the sea ice model maintains aice0=1-aice elsewhere in the code, i.e. aice0+aice covers 100% of the grid that is available to sea ice. Instead of using aice0, a locally computed open water fraction is computed where needed for ice shelves. The sea ice area fraction, aice, will be returned to the coupler as it is now.
Ice shelf area fraction
The ice shelf area fraction, bice, will be used for new ice formation, sea ice transport and ridging. For new ice formation and sea ice transport, bice effectively decreases the total grid cell area available for sea ice to freeze or for transport. Ridging serves to remove ice area from the fraction of the grid cell newly covered by the ice shelf, and it should be computed prior to other sea ice calculations.
New ice formation and sea ice ridging due to the imposition of land ice are both column functions that are (or can be) be part of the column package. Changes for horizontal transport are minimal.
Ridging sea ice
Given the fraction of an ocean grid cell covered by ice shelf, bice, compute the change in that fraction since the last coupling step, dice = bice - bice_old.
If dice <= 0, do nothing. Sea ice will be able to fill in the remaining area 1-bice through advection or new ice growth, if physical conditions are conducive.
If dice > 0, then call ridge_ice_by_shelves. This subroutine is very similar to ridge_ice in ice_mechred.F90, but does not include the initial calculation of sea ice plus open water area (asum_ridging), and instead of calling ridge_prep it calculates the area opening and closing based on the change in land ice area in each grid cell. Then the thickness distribution of ridging ice (ridge_itd), redistribution (ridge_shift), area check (asum_ridging) and iteration test (ridge_check) are calculated using standard column package routines. Conservation checks can also be done using standard routines (column_sum, column_conservation_check). Once the ridging iteration is complete, coupling fluxes (fresh water, heat associated with snow thrown off during ridging) and diagnostics are computed.
In CICE, bergs are blocked from entering cells that have no space available for them (so that a cell can not be 100% berg-filled), and a final check initiates an abort procedure if the resulting total area fraction is larger than 1. In this case, an ice shelf may fill 100% of a grid cell, and when that happens, the excess sea ice area will be melted and added to the ocean through the fresh water, heat and salt fluxes. If conditions are suitable that may then refreeze onto the bottom of the ice shelf elsewhere in the coupled model (i.e., not in the sea ice code).
After ridging, cleanup_itd must be called to rebin thickness categories as necessary and remove categories with very small areas.
New ice formation
When freezing new ice in the open water area, exclude the fraction of the grid cell occupied by ice shelf.
Horizontal transport
When transporting sea ice to or from a grid cell partially covered by ice shelf, the grid cell area is reduced by the ice shelf fraction.
When transport arrays are filled (state_to_tracers in CICE), the open water area fraction is set to 0 if bice>0.99. After making masks (used to prevent tracers in cells without ice from being used to computer tracer gradients), create a temporary land mask that also masks out ice shelves, to use in the transport routines.
Restarts
bice will need to be kept.
Design and Implementation
Given the fraction of an ocean grid cell covered by ice shelf, bergAreaCell, sent from the coupler, compute the change in that fraction since the last coupling step,
bergAreaCellChange = bergAreaCell - bergAreaCellInitial.
(I’ve chosen to name the variable bice as bergAreaCell because in the future iceberg model implementation, that is what it will be in a larger part of the code than this design document affects. For now, we can think of the ice sheet area as not-yet-calved bergs. But I’m open to other suggestions. -ech)
Maintain
aice + bice + aice0tmp = 1 (column package)
iceAreaCell + bergAreaCell + openWaterArea = 1 (MPAS-CICE)
where the sea ice area is needed or used in the following.
Implementation: Retreat of the ice shelf
Date last modified: 2015/09/23
Contributors: Elizabeth Hunke
If bergAreaCellChange <= 0, do nothing. Sea ice will be able to fill in the remaining area 1-bergAreaCell through advection or new ice growth, if physical conditions are conducive.
Implementation: Advance of the ice shelf
Date last modified: 2015/09/22
Contributors: Elizabeth Hunke
Ridging sea ice (column package)
If dice > 0, then call a new subroutine, ridge_ice_by_shelves. This subroutine is very similar to ridge_ice in ice_mechred.F90, but does not include the initial calculation of sea ice plus open water area (asum_ridging), and instead of calling ridge_prep it calculates the area opening and closing as
closing_net = dice/dt ! net closing rate
divu_adv = -closing_net
opning = c0 .
Then the thickness distribution of ridging ice (ridge_itd), redistribution (ridge_shift), area check (asum_ridging) and iteration test (ridge_check) are calculated using standard column package routines. Conservation checks can also be done using standard routines (column_sum, column_conservation_check). Once the ridging iteration is complete, coupling fluxes (fresh water, heat associated with snow thrown off during ridging) and diagnostics are computed as in subroutine ridge_ice. After ridging, cleanup_itd must be called to rebin thickness categories as necessary and remove categories with very small areas, as is currently done in subroutine colpkg_step_ridge.
If an ice shelf fills 100% of a grid cell, the excess sea ice area will be melted and added to the ocean through the fresh water, heat and salt fluxes. (The code will closely follow that in ice_itd.F90/zap_small_areas.) If conditions are suitable, that meltwater may then refreeze onto the bottom of the ice shelf elsewhere in the coupled model (i.e., not in the sea ice code).
New ice formation (column package)
When freezing new ice in the open water area, the fraction of the grid cell occupied by ice shelf is excluded by computing the actual open water area as ai0 = 1 - aice - bice. In particular, in ice_therm_itd.F90/add_new_ice, replace
if (aice0 > puny) then
hi0new = max(vi0new/aice0, hfrazilmin)
if (hi0new > hi0max .and. aice0+puny < c1) then
! distribute excess volume over all categories (below)
hi0new = hi0max
ai0new = aice0
with
ai0 = max(aice0-bice, c0)
if (ai0 > puny) then
hi0new = max(vi0new/ai0, hfrazilmin)
if (hi0new > hi0max .and. ai0+puny < c1) then
! distribute excess volume over all categories (below)
hi0new = hi0max
ai0new = ai0
Horizontal transport
When transporting sea ice to or from a grid cell partially covered by ice shelf, the grid cell area is reduced by the ice shelf fraction.
When transport arrays are filled (state_to_tracers in CICE), the open water area fraction is set to 0 if bice>0.99. After making masks (used to prevent tracers in cells without ice from being used to computer tracer gradients), create a temporary land mask that also masks out ice shelves,
hm_tmp = hm
if (bice > cutoff) hm_tmp = c0
Currently, cutoff=0.9 in CICE but I think this should be made consistent with the cutoff for open water (0.99). This mask is then used for constructing the ice and tracer fields instead of hm.
When ice area and tracers are updated at the end of the transport procedure, the grid cell area is again adjust to account for bice:
tareabr = tarear
if (hm_tmp > 0.5 and bice > puny) tareabr = tarear / (1-bice).
This array is then used for updating the fields instead of tarear. For the conservation checks, a temporary variable is used in place of the grid cell area. In CICE, tarea is replaced with tareab = tarea * (1-bice).
Restarts
Create a new set of read/write subroutines for iceberg restart variables, containing (for now) only bergAreaCellChange.
Planned Verification and Unit Testing
Verification and Unit Testing: Retreat of the ice shelf
Date last modified: 2015/09/22
Contributors: Elizabeth Hunke
Check that when bergAreaCell decreases, sea ice does indeed fill in where freezing or advection allow. Otherwise, no special testing is required.
Verification and Unit Testing: Advance of the ice shelf
Date last modified: 2015/09/22
Contributors: Elizabeth Hunke
Setting bergAreaCell = 0 should produce results identical to the sea ice code without the ice sheet changes.
Planned Validation Testing
Validation Testing: short-desciption-of-testing-here
Date last modified:
Contributors: (add your name to this list if it does not appear)
How will XXX be tested? What observational or other dataset will be used? i.e. how will be we know when we have met requirement XXX. Will these unit tests be included in the ongoing going forward?
Planned Performance Testing
Performance Testing: short-desciption-of-testing-here
Date last modified:
Contributors: (add your name to this list if it does not appear)
How will XXX be tested? i.e. how will be we know when we have met requirement XXX. Will these unit tests be included in the ongoing going forward?