Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

... work in progress.

The CFSR climatology datasets

We pre-computed 30-year seasonal and monthly climatologies from the 6-hourly CFSR dataset, see Computing seasonal and monthly means from CFSR data.

Here we’ll use those datasets to make some nice reference figures.

Load the seasonal data:

Loading...

and the monthly data:

Loading...

Sea level pressure

For many fields, we will make three individual plots:

  • annual mean

  • DJF

  • JJA

Here’s an example for the sea level pressure. I’m choosing a particular map projection here. There are lots of other choices, see the Cartopy documentation.

<Figure size 1000x1500 with 3 Axes>

List of figures

The following figures appear in the slide deck we saw in class, which you can find at this link (courtesy of Professor Brian Tang, University at Albany).

Our objective here is to build recipes to make all (or at least most of) these figures from the CFSR climatology.

  1. SLP this one is already done

    • annual mean

    • DJF

    • JJA

  2. 1000 hPa streamlines

    • annual mean

    • DJF

    • JJA

  3. 1000 hPa zonal wind

    • annual mean

    • DJF

    • JJA

  4. 1000 hPa meridional wind

    • annual mean

    • DJF

    • JJA

  5. 1000 hPa temperature

    • annual mean

  6. 1000 hPa zonal temperature anomaly

    • DJF

    • JJA

  7. 200 hPa streamlines

    • annual mean

    • DJF

    • JJA

  8. 200 hPa zonal wind

    • annual mean

    • DJF

    • JJA

  9. 200 hPa meridional wind

    • annual mean

    • DJF

    • JJA

  10. 500 hPa vertical velocity (omega)

    • annual mean

    • DJF

    • JJA

  11. 500 hPa relative humidity

    • annual mean

    • DJF

    • JJA

  12. 850 hPa moist static energy

    • annual mean

  13. 850 hPa moist static energy zonal anomaly

    • DJF

    • JJA

  14. Surface enthalpy flux

    • annual mean

    • DJF

    • JJA

  15. Schematic: Lagrangian vs Eulerian overturning

Mass overturning circulation

Basic ideas and theory

An element of northward mass flux (in units of kg s−1{^-1}) across latitude line ϕ\phi is

dψ=acos⁡ϕdλ v dpgd\psi = a \cos\phi d\lambda ~ v ~ \frac{dp}{g}

So the total northward mass flux across ϕ\phi above pressure level pp is given by

ψ(p)=∫02π∫0pacos⁡ϕdλ v dpg=2πacos⁡ϕg∫0p[v]dp\begin{align*} \psi(p) &= \int_0^{2\pi} \int_0^p a \cos\phi d\lambda ~ v ~ \frac{dp}{g} \\ &= 2\pi a \frac{\cos\phi}{g} \int_0^p [v] dp \end{align*}

The zonally- and time-averaged mass conservation in pressure coordinates is

1acos⁡ϕ∂∂ϕ([v‾]cos⁡ϕ)+∂[ω‾]∂p=0\frac{1}{a \cos\phi} \frac{\partial}{\partial \phi} \left( [\overline{v}] \cos\phi \right) + \frac{\partial [\overline{\omega}]}{\partial p} = 0

In other words, the vector with components [v‾],[ω‾][\overline{v}], [\overline{\omega}] is non-divergent. So we can represent it with a scalar streamfunction ψ\psi, the mass transport streamfunction:

2πacos⁡ϕ[v‾]=∂ψ∂p2πa2cos⁡ϕ([ω‾])=−∂ψ∂ϕ\begin{align*} 2\pi a \cos\phi [\overline{v}] &= \frac{\partial \psi}{\partial p} \\ 2\pi a^2 \cos\phi \left( [\overline{\omega}]\right) = -\frac{\partial \psi}{\partial \phi} \end{align*}

consistent with the definition of ψ\psi above!

It it thus possible to compute and plot the mass streamfunction from just the zonal wind data, using

ψ=2πacos⁡ϕg∫0p[v‾]dp\psi = \frac{2\pi a \cos\phi}{g} \int_0^p [\overline{v}] dp

Contours of ψ\psi can then be interpreted as streamlines for the mean meridional circulation, that is, the zonal- and time-averaged overturning of mass in the latitude-pressure plane.

Computing the overturning streamfunction from meridonal velocities

We’ll start by taking averages of the vv data:

Loading...

It turns out that the top-most pressure level is missing in the data, e.g.:

array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], dtype=float32)

We can’t integrate over nans so we’ll replace those with zeros instead -- which will make no contribution to the integral.

Now let’s compute the integral!

(I’m calling out to an external package to get values of the constants aa (Earth radius) and gg (acceleration due to gravity))

Loading...

Now we’ve got the streamfunction defined for four seasons. Time to make plots!

Plotting the mass overturning

<Figure size 800x1000 with 3 Axes>