Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Bering Sea: ocean, sea ice and waves — workshop diagnostics

A guided look at a coupled MOM6 + CICE + WW3 regional run of the Bering Sea, aimed at someone who knows ocean models but not sea ice or waves.

Everything is daily-mean output from the case you built! CICE daily fields carry a _d suffix (aice_d, hi_d, ...) because they come from CICE history stream 2.

The physical story this run is built to show

Waves radiate into the ice edge and fracture large floes into smaller ones. Smaller floes have more edge per unit area, and ice melts laterally from its edges — so a broken-up ice cover melts faster than a solid one. Faster melt opens more water, longer open-water fetch builds bigger waves, which break more ice. That feedback is the marginal ice zone (MIZ), and representing it is the entire reason a model carries a floe size distribution (FSD) instead of just ice concentration.

Two caveats, stated up front

  1. No WW3 boundary spectra. This configuration has no wave forcing at the open boundaries, so waves are generated only by winds inside the domain. Real swell travels hundreds of km into pack ice and is absent here. Wave heights, and therefore fracturing, are underestimates.

  2. 327 cells carry a garbage wave height (~2.5e15 m). It is the same 327 cells every day — a static artifact where the WW3 and CICE masks disagree, not evolving physics. The other 8733 wet cells are a sensible 0-9 m. WAVE_MAX below masks them; do not remove that mask without checking.

/glade/derecho/scratch/dbailey/tmp/ipykernel_4969/3540535680.py:16: FutureWarning: In a future version of xarray the default value for data_vars will change from data_vars='all' to data_vars=None. This is likely to lead to different results when multiple datasets have matching variables with overlapping values. To opt in to new defaults and get rid of these warnings now use `set_options(use_new_combine_kwarg_defaults=True) or set data_vars explicitly.
  ice = xr.open_mfdataset(sorted((ARCHIVE/"ice"/"hist").glob(f"{CASE}.cice.h1.*.nc")),
/glade/derecho/scratch/dbailey/tmp/ipykernel_4969/3540535680.py:18: FutureWarning: In a future version, xarray will not decode the variable 'average_DT' into a timedelta64 dtype based on the presence of a timedelta-like 'units' attribute by default. Instead it will rely on the presence of a timedelta64 'dtype' attribute, which is now xarray's default way of encoding timedelta64 values.
To continue decoding into a timedelta64 dtype, either set `decode_timedelta=True` when opening this dataset, or add the attribute `dtype='timedelta64[ns]'` to this variable on disk.
To opt-in to future behavior, set `decode_timedelta=False`.
  ocn = xr.open_mfdataset(sorted((ARCHIVE/"ocn"/"hist").glob(f"{CASE}.mom6.h.sfc.*.nc")),
31 daily frames | ice {'time': 31, 'nbnd': 2, 'nkice': 8, 'nksnow': 3, 'nkbio': 5, 'nkaer': 7, 'nj': 96, 'ni': 216, 'nvertices': 4, 'nc': 5, 'nf': 12}
ocean sfc vars: ['tos', 'sos', 'mlotst', 'SSU', 'SSV']

1. The setting: SST and where the ice is

Ocean and ice are on the same horizontal grid here, so they can be drawn together directly. The black contour is the ice edge, conventionally the 15% concentration line.

Note the ice sits where SST is at the freezing point (about -1.8 C for seawater) — ice and SST are not independent fields, they are two views of the same surface heat budget.

<Figure size 1100x420 with 2 Axes>

2. The movie: SST with ice concentration on top

Ice concentration is drawn as a translucent white overlay, so you see the ocean underneath and the ice pack riding on it. Watch the ice edge advance and flex with the weather.

With only a month of output this is short. The same cell will produce a full seasonal animation once the 12-month case finishes — nothing here depends on the run length.

Loading...
saved /glade/work/dbailey/bering/bering_sst_ice_animation.mp4

3. The wave field inside the ice

wave_sig_ht_d is significant wave height where there is ice — the quantity that drives fracturing.

Two things to look for. Wave height should decay going into the pack: ice damps waves, so the biggest values sit at the ice edge and fall off inward. And wave height should be episodic — calm for days, then a storm.

(The mask below removes the 327 artifact cells. n_bad is printed so you can confirm it is still the same small, constant number.)

masked artifact cells: 0 (expected ~327, constant in time)
<Figure size 1100x420 with 2 Axes>

4. What the floe size distribution actually is

Ice concentration says how much ice. The FSD says how it is broken up.

afsd_d has an extra dimension nf — 12 floe-size categories, smallest to largest. For each grid cell it gives the fraction of ice area in each size class, so it is a histogram per cell. fsdrad_d collapses that to a single representative floe radius, which is the easy thing to map.

Below: a map of representative radius, then the full distribution at two contrasting points — one near the ice edge, one deep in the pack. Expect the edge to be shifted toward small floes.

<Figure size 1300x400 with 3 Axes>

5. Which process is reshaping the floes?

This is the most diagnostic view. CICE reports the FSD tendency split by process, and they form a budget:

termprocess
dafsd_wave_dwave fracturing — the wave-to-ice coupling
dafsd_weld_dwelding: floes freezing back together in calm conditions
dafsd_newi_dnew ice formation
dafsd_latg_dlateral growth
dafsd_latm_dlateral melt

Wave fracturing has a characteristic signature: negative at large floe sizes, positive at small ones — area being moved down the size spectrum as big floes shatter. That sign pattern, not the magnitude, is the thing to recognise, and it is clearly visible in the left panel below.

The right panel puts fracturing activity next to peak wave height. Over only seven winter days these do not track each other cleanly — do not read a correlation into it. Fracturing depends on the wave spectrum reaching floes of a breakable size, not on peak height alone, and a week is far too short a sample. This panel becomes meaningful over the 12-month run.

Only dafsd_wave is on the daily stream here; the others default to monthly. Add them to user_nl_cice as 'mdxxx' if you want the full budget daily.

<Figure size 1200x380 with 3 Axes>

6. Domain-integrated time series

The summary numbers an oceanographer will want: how much ice there is, how thick, how broken up, and how energetic the waves are. Over a week these barely move; over a year they show the full advance and retreat.

ice area is concentration times cell area summed — the physically meaningful quantity, as opposed to extent (area of cells exceeding 15%), which is what satellite products usually report.

<Figure size 1100x600 with 4 Axes>

What to take away

  • Ice and SST are one system. Ice forms where the ocean is at freezing; the ice edge and the -1.8 C isotherm track each other.

  • The FSD is the ice cover’s grain size. Two cells with identical concentration can melt at very different rates depending on how broken up they are, because melt happens at floe edges.

  • dafsd_wave is the coupling term to watch. It is the only place in this model where the wave field changes the ice, and its negative-at-large / positive-at-small signature is the fingerprint of fracturing.

  • Remember what is missing. No wave forcing at the boundaries means no remotely generated swell, which is the dominant ice-breaking agent in the real Bering Sea. Treat the wave-ice coupling here as a demonstration of mechanism, not a quantitative result.

Next

A 12-month version of this case is being set up, which will make the animation in section 2 show a full ice advance and retreat, and turn section 6 into a real seasonal cycle.