pcmdi_metrics.variability_mode.NAM

pcmdi_metrics.variability_mode.NAM(model_ds, data_var='psl', seasons=['DJF', 'MAM', 'JJA', 'SON'], reference_ds=None, method='eof', start_year=None, end_year=None, remove_domain_mean=True, land_mask=False, landfrac_ds=None, units_adjust=None, reference_units_adjust=None)[source]

Compute Northern Annular Mode (NAM) diagnostics and metrics.

The NAM is the leading EOF of sea level pressure over the Northern Hemisphere (20-90N). This function performs EOF analysis on model data and optionally compares against reference data using spatial correlation, RMS differences, and other statistics.

Parameters:
  • model_ds (xr.Dataset) – Model dataset containing sea level pressure data.

  • data_var (str, optional) – Variable name in the dataset. Default is ‘psl’.

  • seasons (list of str, optional) – List of seasons to compute. Default is [‘DJF’, ‘MAM’, ‘JJA’, ‘SON’].

  • reference_ds (xr.Dataset, optional) – Reference/observational dataset for computing metrics. Default is None.

  • method (str, optional) – Method to use: ‘eof’ (default) or ‘cbf’ (requires reference_ds).

  • start_year (int, optional) – Start year for analysis. Default is None (use all data).

  • end_year (int, optional) – End year for analysis. Default is None (use all data).

  • remove_domain_mean (bool, optional) – If True (default), remove domain mean at each time step. This detrends the data by subtracting the spatial mean, focusing on spatial patterns.

  • land_mask (bool, optional) – If True, mask out land regions. Default is False.

  • landfrac_ds (xr.Dataset, optional) – Dataset containing land fraction (‘sftlf’). If land_mask is True but this is not provided, a land-sea mask will be generated automatically.

  • units_adjust (tuple, optional) – Unit conversion tuple: (enable, operation, value). Example: (True, ‘divide’, 100.0) converts Pa to hPa. Operations: ‘multiply’, ‘divide’, ‘add’, ‘subtract’. Default is None (no conversion).

  • reference_units_adjust (tuple, optional) – Same as units_adjust but for reference dataset. Default is None.

Returns:

dict – Results dictionary with structure: {

’SEASON’: {
‘diagnostics’: {

‘eof_pattern’: xr.DataArray, # EOF spatial pattern ‘pc_timeseries’: xr.DataArray, # PC time series ‘frac’: float, # Variance fraction ‘stdv_pc’: float, # PC standard deviation ‘mean’: float, # Spatial mean (subdomain) ‘mean_glo’: float, # Spatial mean (global)

}, ‘metrics’: { # Only present if reference_ds provided

’cor’: float, # Spatial correlation (subdomain) ‘cor_glo’: float, # Correlation (global teleconnection) ‘rms’: float, # RMS error (subdomain) ‘rms_glo’: float, # RMS error (global teleconnection) ‘rmsc’: float, # Centered RMS (subdomain) ‘rmsc_glo’: float, # Centered RMS (global teleconnection) ‘bias’: float, # Bias (subdomain) ‘bias_glo’: float, # Bias (global teleconnection) ‘stdv_pc_ratio_to_obs’: float, # PC stdv ratio

}

}

}

Examples

>>> from pcmdi_metrics.variability_mode import NAM
>>> results = NAM(model_ds, reference_ds=obs_ds)

References

Lee, J., K. Sperber, P. Gleckler, C. Bonfils, and K. Taylor, 2019:

Quantifying the Agreement Between Observed and Simulated Extratropical Modes of Interannual Variability. Climate Dynamics, 52, 4057-4089. https://doi.org/10.1007/s00382-018-4355-4