Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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: 2015/09/25
Contributors: 

(add your name to this list if it does not appear)

Stephen Price


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


How will XXX

Date last modified: 2015/09/25
Contributors:

 (add your name to this list if it does not appear)

 

Stephen Price

 

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?

Moving sea ice / ice sheet boundaries within the sea ice model is a new capability that has never been tested before. It's impact on performance will be tested by comparing test simulations with this new feature active against those when it is inactive (i.e., comparing runs with a static ice sheet / sea ice interface vs. runs runs where the ice sheet / sea ice interface is allowed to migrate freely).