CICE
Overview
The Community Ice CodE (CICE) is a sea ice model that was first developed by Elizabeth Hunke as the Los Alamos Sea Ice Model. Its code base and capabilities have grown as a result of continued development by the broader geosciences community, an effort organized by the CICE Consortium.
Dr. Cecilia Bitz implemented support for the CICE (v5) model (as part of CESM) in DART; this was later updated for compatibility with CICE v6. The DART model interface was developed to work with CICE’s dynamical core on an Arakawa B-grid. [1] When CICE is coupled to POP in CESM, the ocean and sea ice grids are identical.
According to the CICE manual:
The spatial discretization is specialized for a generalized orthogonal B-grid as in Murray (1996) [2] or Smith et al. (1995). [3] The ice and snow area, volume and energy are given at the center of the cell, velocity is defined at the corners, and the internal ice stress tensor takes four different values within a grid cell; bilinear approximations are used for the stress tensor and the ice velocity across the cell, as described in Hunke and Dukowicz (2002). [4] This tends to avoid the grid decoupling problems associated with the B-grid.
Hence, in the DART interface:
U,Vare at grid cell cornersT,h,hs, and the various scalar quantities are at grid cell centers
CICE is under development to work with other grids, such as the unstructured grid in MPAS and the C-grid in MOM.
Namelist
&model_nml
assimilation_period_days = 1
assimilation_period_seconds = 0
model_perturbation_amplitude = 0.00002
update_dry_cell_walls = .false.
binary_grid_file_format = 'big_endian'
debug = 1
model_state_variables = 'aicen', 'QTY_SEAICE_CONCENTR', 'UPDATE',
'vicen', 'QTY_SEAICE_VOLUME', 'UPDATE',
...
'vsnon', 'QTY_SEAICE_SNOWVOLUME', 'UPDATE',
/
Description of each namelist entry
Item |
Type |
Description |
|---|---|---|
time_step_days |
integer |
Number of days for dimensional timestep, mapped to deltat. |
time_step_seconds |
integer |
Number of seconds for dimensional timestep, mapped to deltat. |
model_perturbation_amplitude |
real(r8) |
Perturbation amplitude |
update_dry_cell_walls |
logical |
Currently does nothing. Additional code is needed to detect the cells which are wet but within 1 cell of the bottom/sides/etc. |
binary_grid_file_format |
character(64) |
Byte sequence for the binary grid. Valid values are native, big_endian & little_endian. |
debug |
integer |
When set to 0, debug statements are not printed. Higher numbers mean more debug reporting. |
model_state_variables |
character(*) |
List of model state variables |
Postprocessing
The CICE model interface includes a postprocessing program dart_to_cice that
modifies the CICE state to be consistent with the state output from DART assimilation.
This postprocessing is required when the assimilation configuration cannot appropriately account for the bounds on sea ice variables in the model. Prior to the introduction of the QCEF framework, the use of Gaussian distributions in the EAKF, in particular, often results in updates to sea ice concentration (SIC) that exceeded 0 or 1; it was also possible to produce adjustments to sea ice volume or thickness that were negative. [6] While these errors do not hamper the DA filtering, they result in various CICE and Icepack model crashes when the adjusted restart files are used to initialize subsequent forecasts.
The utilization of bounded distributions in the QCEF framework reduces erroneous updates in the observation space, removing a source of the errors postprocessing seeks to address. [7] [8] However, the need for postprocessing remains, since the model’s state variables are represented using an ice thickness distribution, [5] which divides sea ice area and volume in each grid cell into discrete ice thickness categories. Observable sea ice variables like SIC and SIT are aggregated from the individual category fractions of sea ice area and volume. During the filtering process, observation increments are regressed onto categorized state variables, and the final updated aggregate variable is recalculated as the sum (or weighted sum) of the categories. In some cases, it is still not possible to appropriately account for bounds on each category of a state variable and the bounds on their sum. [8] This is the case for categorized sea ice area and total SIC, since SIC itself cannot be less than 0 or greater than 1, but each area category can only berestricted to the interval [0, 1] in the DA process. As such, it is still currently possible to assimilate observations that result in SIC greater than 1 and postprocessing steps are still required for CICE-DART.
There are currently 3 CICE/Icepack postprocessing options available in DART. The first two
(aicen_simple_squeeze or vice_simple_squeeze) are mass-aware rescaling approaches
that conserve sea ice area or volume post-DA, respectively. The third and recommended default
option is cice_rebalancing, which adapts a series of functions originally developed to
internally “rebalance” the CICE ice thickness distribution under conditions of unusually
rapid or unexpected ice change. These routines are housed in the ice_postprocessing
module, but called and deployed in dart_to_cice.
The postprocessing options for dart_to_cice are controlled by the namelist
dart_to_cice_nml.
&dart_to_cice_nml
dart_to_cice_input_file = 'dart_restart.nc'
original_cice_restart_file = 'cice_restart.nc'
postprocessed_output_file = 'postprocessed_restart.nc'
postprocess = 'cice'
/
Item |
Type |
Description |
|---|---|---|
dart_to_cice_input_file |
character(*) |
Output from filter |
original_cice_restart_file |
character(*) |
Original CICE restart file that was input to filter |
postprocessed_output_file |
character(*) |
Postprocessed CICE restart file |
postprocess |
character(*) |
Postprocessing method. Must be one of the following: ‘cice’ (default), ‘aice’, ‘vice’ |