Climate indices computation package based on Xarray with extensive climate analysis capabilities
Sea ice concentration and extent indicators for polar climate analysis and marine applications. These indicators are crucial for Arctic and Antarctic climate monitoring, shipping route planning, and marine ecosystem assessment.
Basic sea ice metrics for polar climate monitoring and trend analysis.
def sea_ice_area(sic, freq="YS"):
"""
Total sea ice area from sea ice concentration.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data (0-1 or %)
- freq: str, resampling frequency (default "YS" for yearly)
Returns:
xr.DataArray: Total sea ice area
"""
def sea_ice_extent(sic, thresh="15%", freq="YS"):
"""
Sea ice extent (area with concentration above threshold).
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- thresh: str or float, concentration threshold (default "15%")
- freq: str, resampling frequency
Returns:
xr.DataArray: Sea ice extent
"""
def sic_mean(sic, freq="YS"):
"""
Mean sea ice concentration over specified period.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- freq: str, resampling frequency
Returns:
xr.DataArray: Mean sea ice concentration
"""
def sic_max(sic, freq="YS"):
"""
Maximum sea ice concentration over specified period.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- freq: str, resampling frequency
Returns:
xr.DataArray: Maximum sea ice concentration
"""Threshold-based sea ice metrics for extreme ice conditions analysis.
def sic_days_above(sic, thresh="15%", freq="YS"):
"""
Number of days with sea ice concentration above threshold.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- thresh: str or float, concentration threshold (default "15%")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of days above threshold
"""
def sic_days_below(sic, thresh="15%", freq="YS"):
"""
Number of days with sea ice concentration below threshold.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- thresh: str or float, concentration threshold (default "15%")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of days below threshold
"""
def ice_free_days(sic, thresh="15%", freq="YS"):
"""
Number of ice-free days (concentration below threshold).
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- thresh: str or float, ice-free threshold (default "15%")
- freq: str, resampling frequency
Returns:
xr.DataArray: Number of ice-free days
"""Sea ice seasonality metrics for understanding ice formation and melt patterns.
def sea_ice_season_start(sic, thresh="15%", window=5, freq="YS"):
"""
Start date of sea ice season.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- thresh: str or float, concentration threshold (default "15%")
- window: int, minimum number of consecutive days (default 5)
- freq: str, resampling frequency
Returns:
xr.DataArray: Ice season start day of year
"""
def sea_ice_season_end(sic, thresh="15%", window=5, freq="YS"):
"""
End date of sea ice season.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- thresh: str or float, concentration threshold (default "15%")
- window: int, minimum number of consecutive days (default 5)
- freq: str, resampling frequency
Returns:
xr.DataArray: Ice season end day of year
"""
def sea_ice_season_length(sic, thresh="15%", window=5, freq="YS"):
"""
Length of sea ice season.
Parameters:
- sic: xr.DataArray, daily sea ice concentration data
- thresh: str or float, concentration threshold (default "15%")
- window: int, minimum number of consecutive days (default 5)
- freq: str, resampling frequency
Returns:
xr.DataArray: Ice season length in days
"""import xarray as xr
import xclim.seaIce as xcs
# Load sea ice concentration data
sic = xr.open_dataset("sea_ice.nc").siconc # Concentration in %
# Calculate basic sea ice metrics
ice_area = xcs.sea_ice_area(sic, freq="YS")
ice_extent = xcs.sea_ice_extent(sic, thresh="15%", freq="YS")
mean_conc = xcs.sic_mean(sic, freq="YS")# Analyze ice season timing and duration
season_start = xcs.sea_ice_season_start(
sic, thresh="15%", window=7, freq="YS"
)
season_end = xcs.sea_ice_season_end(
sic, thresh="15%", window=7, freq="YS"
)
season_length = xcs.sea_ice_season_length(
sic, thresh="15%", window=7, freq="YS"
)
# Count ice-free days
ice_free = xcs.ice_free_days(sic, thresh="15%", freq="YS")# Days with significant ice cover
ice_days = xcs.sic_days_above(sic, thresh="50%", freq="YS")
# Days with minimal ice
low_ice_days = xcs.sic_days_below(sic, thresh="30%", freq="YS")