`sam` documentation

`sam` computes a version of the Southern Annular Mode index, also known as the Antarctic Oscillation.

Back to Climate Data Tools Contents

## Contents

## Syntax

idx = sam(slp40,slp65,t)

## Description

`idx = sam(slp40,slp65,t)` calculates the Southern Annular Mode index from two time series of sea-level pressures at two latitudes (40S and 65S) and their corresponding times `t`.

## Example

Here, we'll recreate Figure 7 from Marshall's classic 2003 paper, Trends in the Southern Annular Mode from observations and reanalyses (Marshall, 2003), which depicts the monthly SAM index.

## Load Data

We can load data containing zonal-mean SLP at 40S and 65S calculated from observations from 1957 January to 2018 December.

```
load sam_slp_data.mat
```

## Plot pressure data

The sam_slp_data.mat file contains monthly zonal mean pressures from 1957 to 2018. (A note on how to get these types of zonal mean pressures from gridded data appears at the bottom of this page.) Here is the pressure data we'll use to calculate SAM:

figure plot(t,slp40); hold on plot(t,slp65) axis tight legend('mean SLP at 40\circS','mean SLP at 65\circS')

## Calculate SAM index

The `sam` function normalizes each time series relative to a 1971-2000 baseline, and differences the two pressure anomaly time series to yield the SAM index.

% Calculate SAM index: sam_idx = sam(slp40,slp65,t); figure plot(t,sam_idx,':','color',rgb('gray')); hold on plot(t,movmean(sam_idx,12),'k','linewidth',1) ylabel('SAM Index') xlabel('Year') xlim([datetime(1955,1,1) datetime(2005,1,1)]) % sets date limits ylim([-8 8]) % sets vertical limits hline(0,'k--') % draws horizontal line

Above, the built-in Matlab function `movmean` was used to calculate the 12 month moving mean, and a horizontal dashed line was drawn with `hline` to match Marshall's Figure 7.

## Getting zonal mean pressures

The example above begins by loading zonal mean pressures from 40S and 65S. If you're working with gridded data you'll need to calculate the zonal means at 40S and 65S. Do that like this. Start by loading some example data: (using `ncdateread` to read the date time).

lat = double(ncread('ERA_Interim_2017.nc','latitude')); lon = double(ncread('ERA_Interim_2017.nc','longitude')); t = ncdateread('ERA_Interim_2017.nc','time'); sp = ncread('ERA_Interim_2017.nc','sp');

A brute force way to get the zonal means at 40S and 65S is to interpolate to 40S and 65S at each unique longitude in the grid, and then average the results, for each timestep. Begin by preallocating the outputs, then loop through each time step, interpolating to 40S and 65S

% Preallocate zonal mean pressure time series: slp40 = NaN(size(t)); slp65 = NaN(size(t)); % Loop through each time step: for k = 1:length(t) % Take the mean of SLPs at all longitides, interpolated to 40S: slp40(k) = mean(interp2(lat,lon,sp(:,:,k),-40*ones(size(lon)),lon)); % Take the mean of SLPs at all longitides, interpolated to 65S: slp65(k) = mean(interp2(lat,lon,sp(:,:,k),-65*ones(size(lon)),lon)); end figure plot(t,slp40) hold on plot(t,slp65) legend('mean SLP at 40\circS','mean SLP at 65\circS')

## Reference

Marshall, G. J., 2003: Trends in the Southern Annular Mode from observations and reanalyses. J. Clim., 16, 4134-4143. https://journals.ametsoc.org/doi/pdf/10.1175/1520-0442%282003%29016%3C4134%3ATITSAM%3E2.0.CO%3B2

## Author Info

The `sam` function and supporting documentation were written by Kaustubh Thirumalai for the Climate Data Toolbox for Matlab, 2019.