I’m reviewing the definition of the effective ice thickness (not the volume) in XIOS in preparation for CMIP7. There are currently two main definitions in field_def_nemo-ice.xml:
The first definition (icethic) masks grid points showing ice concentrations less than 1e-6 (in icewri.F90). However, icethic shows some unrealistic ice thickness points in the marginal ice zone, at least in the configs I have been using. This occurs when the ice concentration approaches zero and the ice volume is small. The second definition (icethic_cmip) selects a threshold of 5 % in ice concentration. It does a good job in masking the large high ice thickness, but at the cost of the modelled marginal ice zone.
To support the discussion, I drew a 2D histogram of icethic against iceconc using every sea ice / SBC time step data over a period of one year. The modelled ice thickness is mostly within a realistic range, except when the ice concentration is close to zero.
What is your masking strategy? Has anyone examined the unrealistically large ice thickness problem in more detail? I am considering an ice concentration threshold of 1e-5 or 1e-4. I would like your input before doing so.
Besides this topic, Notz et al. (2016) require for the CMIP exercises to weight the ice thickness (sithick) by the ice area over the averaging period. I implemented sithickfollowing the CMIP protocol thanks to examples provided by the dr2xml team. Let me know if any of you are interested. I’m using NEMO 4.2 (CanESM / CanNEMO).
thanks for this plot. I knew we had issues with very large ice thickness in very small ice concentration areas. However, your plot illustrates perfectly the issue and the choice of a threshold for outputs is now possible. I would say that 1.e-4 is the safe threshold and will not affect the MIZ. When I coded the outputs I wanted to have the same threshold for all the outputs without loosing too much info in the MIZ, hence I used 1.e-6. But 1.e-4 looks like a better pick.
Btw, the thickness issue comes from an inconsistency when advecting concentration A and volume V and then retrieving thickness as H=V/A.
Some news about the masking of sea variables. Eventually, we decided to settle on an ice concentration threshold of 1e-3 (we might revisit it). I can still see some inconsistent points when looking at timestep data with ncview, but it’s acceptable. These points are smoothed out when doing time averages. Thanks for your explanation.
In this thread, I also wanted to share some of my work on the time area-weighted averages of intensive variables (Notz et al., 2016). I think it can be useful for other NEMO users who want to compare their results in the framework of the CMIP exercises. So, here is part of my solution for the sea ice thickness, surface temperature and velocity:
In the field definition section, I introduced:
<field_group id="SBC" > <!-- time step automaticaly defined based on nn_fsbc -->
<field_group id="SBC_2D" grid_ref="grid_T_2D" >
<!-- NEMO variable definitions -->
<field id="icemask" long_name="Fraction of time steps with sea ice" standard_name="sea_ice_mask" unit="" />
<field id="iceconc" long_name="Sea-ice area fraction" standard_name="sea_ice_area_fraction" unit="" />
<field id="icethic" long_name="Sea-ice thickness" standard_name="sea_ice_thickness" unit="m" />
<field id="icettop" long_name="temperature at the ice surface" unit="degC" /> <!-- JS: I removed the detect missing values option to ensure that mean(icettop * iceconc * icemask) and mean(iceconc * icemask) have the same number of elements -->
<field id="icevel" long_name="Sea-ice speed" standard_name="sea_ice_speed" unit="m/s" />
<!-- ice area fractions - denominator of the area-weighted means -->
<field id="iceconcm" standard_name="iceconc_masked" unit="" > iceconc * icemask </field>
<!-- intensive ice variables multiplied by the area fraction (snow or ice) - numerator of the area-weighted means -->
<field id="icethic_iceconcm" standard_name="icethic ice area masked" unit="m" > icethic * iceconcm </field>
<field id="icettop_iceconcm" standard_name="icettop ice area masked" unit="K" > (icettop + 273.15) * iceconcm </field>
<field id="icevel_iceconcm" standard_name="icevel ice area masked" > icevel * iceconcm </field>
<!-- CMIP variable definitions - metadata only – not connected to input data streams -->
<field id="icethic_cmip" long_name="Sea-ice thickness" standard_name="sea_ice_thickness" unit="m" />
<field id="icettop_cmip" long_name="Surface temperature of sea ice" standard_name="sea_ice_surface_temperature" unit="K" />
<field id="icevel_cmip" long_name="Sea-ice speed" standard_name="sea_ice_speed" unit="m/s" />
</field_group>
</field_group>
and in the file definition section, I’m performing the final weighted average:
Thanks for the xml sections, that’ll be useful at least to me and maybe to other people non fluent in xios. The last approach derived from Notz et al. 2016 feels like the most “consistent” one to me. But IMO that’s a matter of personal preference. I think it can still generate very large thicknesses over cells that had seen ice frazils (super thick ice, super low concentration) only on a few time steps, but that will be somehow “diluted”. And anyhow any further spatial average should also be weighted by concentration (or relying on ice volume directly).
This is somehow feels similar to outputting avg(thetao*e3t) / avg(e3t),avg(transport_u*e3u) / avg(e3u), instead of avg(thetao) or avg(transport_u). It’s about normalizing an intensive variable with respect to the “volume” it’s tied to.