Sea-ice Integrated Ice-Edge Error (IIEE)
The metric computes the monthly climatological annual cycle of Integrated Ice-Edge Error (IIEE) between observational and model sea ice concentration datasets.
The calc_iiee_annual_cycle function of the PMP subsets the input datasets to the requested time range, computes monthly climatologies, evaluates IIEE for each month, and optionally saves monthly comparison plots plus a seasonal-cycle summary plot.
Reference:
Goessling, H. F., et al. 2016: Predictability of the Arctic sea ice edge, Geophys. Res. Lett., 43, 1642–1650, doi:10.1002/2015GL067232.
Watts et al. 2021: A Spatial Evaluation of Arctic Sea Ice and Regional Limitations in CMIP6 Historical Simulations. Journal of Climate, 34, 6399-6420, DOI: 10.1175/JCLI-D-20-0491.1
Prepare input dataset
The demo data can be download as a part of the PMP Demo 0 Notebook.
In this demo, we are usig OSI-SAF as observation and E3SM-1-0 as a sample model output to evaluation against the observation.
Dataset can be loaded as
xarray.datasetusingopen_datasetoropen_mfdatasetof eitherxarrayorxcdat.
[1]:
import xarray as xr
ds_obs_nh = xr.open_dataset("demo_data/misc_demo_data/ocn/ice_conc_nh_ease2-250_cdr-v3p0_198801-202012.nc")
ds_obs_sh = xr.open_dataset("demo_data/misc_demo_data/ocn/ice_conc_sh_ease2-250_cdr-v3p0_198801-202012.nc")
ds_model = xr.open_mfdataset("demo_data/CMIP5_demo_timeseries/historical/ice/mon/siconc_SImon_E3SM-1-0_historical_r1i1p1f1_*_*.nc")
Run the API
Load the API first:
More description for the API can be found at here.
[2]:
from pcmdi_metrics.sea_ice import calc_iiee_annual_cycle
Arctic
[3]:
result_nh = calc_iiee_annual_cycle(
ds_obs=ds_obs_nh,
ds_model=ds_model,
obs_data_var="ice_conc",
model_data_var="siconc",
syear=2010,
eyear=2014,
save_dir="output_nh",
identifier="E3SM-1-0_r1i1p1f1_NH"
)
Antarctic
[4]:
result_sh = calc_iiee_annual_cycle(
ds_obs=ds_obs_sh,
ds_model=ds_model,
obs_data_var="ice_conc",
model_data_var="siconc",
syear=2010,
eyear=2014,
save_dir="output_sh",
identifier="E3SM-1-0_r1i1p1f1_SH"
)
Results
result is a Python Dictionary containing metadata and monthly IIEE metric values. Running the above API also generates diagnostics outputs as PNG files in the directory given as save_dir.
[5]:
result_nh
[5]:
{'metadata': {'start_year': 2010,
'end_year': 2014,
'obs_variable': 'ice_conc',
'model_variable': 'siconc',
'ice_threshold_percent': 15.0,
'grid_cell_area_km2': 625.0,
'obs_lat_name': 'lat',
'obs_lon_name': 'lon',
'model_lat_name': 'lat',
'model_lon_name': 'lon'},
'metrics': {1: {'iiee_overestimated_km2': 1933750.0,
'iiee_underestimated_km2': 803125.0,
'iiee_total_area_km2': 2736875.0},
2: {'iiee_overestimated_km2': 2708125.0,
'iiee_underestimated_km2': 840625.0,
'iiee_total_area_km2': 3548750.0},
3: {'iiee_overestimated_km2': 2766250.0,
'iiee_underestimated_km2': 670000.0,
'iiee_total_area_km2': 3436250.0},
4: {'iiee_overestimated_km2': 2776250.0,
'iiee_underestimated_km2': 618125.0,
'iiee_total_area_km2': 3394375.0},
5: {'iiee_overestimated_km2': 2182500.0,
'iiee_underestimated_km2': 531875.0,
'iiee_total_area_km2': 2714375.0},
6: {'iiee_overestimated_km2': 1669375.0,
'iiee_underestimated_km2': 500625.0,
'iiee_total_area_km2': 2170000.0},
7: {'iiee_overestimated_km2': 1277500.0,
'iiee_underestimated_km2': 1192500.0,
'iiee_total_area_km2': 2470000.0},
8: {'iiee_overestimated_km2': 848125.0,
'iiee_underestimated_km2': 1393750.0,
'iiee_total_area_km2': 2241875.0},
9: {'iiee_overestimated_km2': 671250.0,
'iiee_underestimated_km2': 2107500.0,
'iiee_total_area_km2': 2778750.0},
10: {'iiee_overestimated_km2': 122500.0,
'iiee_underestimated_km2': 2300000.0,
'iiee_total_area_km2': 2422500.0},
11: {'iiee_overestimated_km2': 373750.0,
'iiee_underestimated_km2': 1306250.0,
'iiee_total_area_km2': 1680000.0},
12: {'iiee_overestimated_km2': 803125.0,
'iiee_underestimated_km2': 1325000.0,
'iiee_total_area_km2': 2128125.0}}}
Diagnostics
Arctic
Map of simulated/observed sea-ice and the area of over/under-estimation
[6]:
!ls output_nh
sic_iiee_E3SM-1-0_r1i1p1f1_NH_line_plot.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_01.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_02.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_03.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_04.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_05.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_06.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_07.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_08.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_09.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_10.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_11.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_12.png
sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_all.png
[7]:
from IPython.display import Image, display
display(Image(filename='output_nh/sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_01.png'))
The API also generates maps for all individual months of thier climatology:
[8]:
display(Image(filename='output_nh/sic_iiee_E3SM-1-0_r1i1p1f1_NH_month_all.png'))
Line plot
The API also generates a line plot for the annual cycle.
[9]:
display(Image(filename='output_nh/sic_iiee_E3SM-1-0_r1i1p1f1_NH_line_plot.png'))
Antarctic
[10]:
!ls output_sh/
sic_iiee_E3SM-1-0_r1i1p1f1_SH_line_plot.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_01.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_02.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_03.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_04.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_05.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_06.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_07.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_08.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_09.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_10.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_11.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_12.png
sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_all.png
[11]:
display(Image(filename='output_sh/sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_01.png'))
[12]:
display(Image(filename='output_sh/sic_iiee_E3SM-1-0_r1i1p1f1_SH_month_all.png'))
[13]:
display(Image(filename='output_sh/sic_iiee_E3SM-1-0_r1i1p1f1_SH_line_plot.png'))