{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# The Influence of SST on Midlatitude Cyclones\n",
"\n",
"There are many factors that can influence the the life cycle of a midlatitude cyclone. For cyclones that form and track along coastal regions of the southern and eastern US, sea surface temperatures (SSTs) can have a profound impact on the strength and speed of intensification of a given cyclone. In order to begin to understand the relationship we'll want to look at data that represent both the atmospheric strength of a cyclone with some information about ocean conditions. Where we have warmer SSTs there is greater capacity for moisture just above the ocean surface, which in turn can lead to greater latent heat release. It's the latent heat release that can strongly modify the environment to amplify atmospheric processes and thus produce a deeper (stronger) midlatitude cyclone in a very short amount of time.\n",
"\n",
"Let's investigate a case to determine whether SSTs appear to play a major role in the life cycle of a midlatitude cyclone. \n",
"\n",
"Case: March 2023 Nor'Easter\n",
"Dates: 11-15 March 2023\n",
"\n",
"Main Impacts: Heavy Snowfall, High Winds, Blizzard Conditions\n",
"\n",
"States Impacted: New York, Massechusettes\n",
"\n",
"Background Resource Information"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Atmospheric Data\n",
"\n",
"There are any number of different datasets that can be used to access atmospheric\n",
"data. Here we are going to access the National Oceanic and Atmospheric Administration (NOAA)\n",
"National Center for Environmental Information (NCEI) THREDDS server to gather Global\n",
"Forecast System analysis output to capture the strength of the midlatitude cyclone using\n",
"the variable that gives the MSLP.\n",
"\n",
"Data Source: GFS 0.5 Degree Analysis Files"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from datetime import datetime\n",
"\n",
"from metpy.units import units\n",
"import xarray as xr\n",
"\n",
"# Specify our date/time of product desired\n",
"date = datetime(2023, 3, 11, 12)\n",
"\n",
"# ds = xr.open_dataset('https://thredds.rda.ucar.edu/thredds/dodsC/files/g/ds084.1/'\n",
"# f'{date:%Y}/{date:%Y%m%d}/gfs.0p25.{date:%Y%m%d%H}.f000.grib2')\n",
"ds = xr.open_dataset('https://www.ncei.noaa.gov/thredds/dodsC/model-gfs-g4-anl-files/'\n",
" f'{date:%Y%m/%Y%m%d}/gfs_4_{date:%Y%m%d_%H}00_000.grb2')\n",
"# Subset data to be just over the CONUS\n",
"ds = ds.sel(lat=slice(80, 10), lon=slice(360-145, 360-40))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Ocean Data\n",
"There are also a number of different data sources that can provide information\n",
"about the sea surface temperatures (SSTs) of the ocean and large freshwater bodies\n",
"(e.g., the Great Lakes). Here access to a THREDDS-like server will allow us to\n",
"gather Optimal Interpolation (OI) SST that contains both the actual SST values as well\n",
"as the anaomalies from long term means already computed.\n",
"\n",
"Data Source: https://coastwatch.pfeg.noaa.gov/erddap/griddap/ncdcOisst21NrtAgg.html"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"ds_sst = xr.open_dataset('https://coastwatch.pfeg.noaa.gov/erddap/griddap/ncdcOisst21NrtAgg')\n",
"\n",
"ds_sst = ds_sst.metpy.sel(time=date, method='nearest').sel(latitude=slice(10, 80), longitude=slice(360-145, 360-40))\n",
"\n",
"print(f\"Nearest SST time: {ds_sst.time.values.astype('datetime64[ms]').astype('O')}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Visualize Combined Data\n",
"\n",
"For this case we are looking to assess the potential role that SSTs had\n",
"in the evolution of the midlatitude cyclone. The impact that would be made\n",
"would occur through the latent heat release that would be amplified due to\n",
"the cyclone moving across relatively warmer SSTs compared to the cold\n",
"air moving off the land. The addition of this latent heat release would\n",
"amplify the amount of rising motion that couple aid in making the storm\n",
"stronger (deeper; with a lower surface pressure) than would have happened\n",
"if the storm occurred only over land.\n",
"\n",
"Let's investigate both the actual SST values and the SST anomaly values to\n",
"assess the possible impact on the cyclone evolution."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plot SST and MSLP Data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from metpy.plots import declarative\n",
"import numpy as np\n",
"\n",
"sst = declarative.RasterPlot()\n",
"sst.data = ds_sst\n",
"sst.field = 'sst'\n",
"sst.colormap = 'RdYlBu_r'\n",
"sst.colorbar = 'horizontal'\n",
"sst.image_range = (-5, 35)\n",
"\n",
"mslp = declarative.ContourPlot()\n",
"mslp.data = ds\n",
"mslp.field = 'Pressure_reduced_to_MSL_msl'\n",
"mslp.time = date\n",
"mslp.contours = range(0, 2000, 4)\n",
"mslp.plot_units = 'hPa'\n",
"mslp.smooth_field = 2\n",
"mslp.clabels = True\n",
"\n",
"# Panel for plot with Map features\n",
"panel = declarative.MapPanel()\n",
"panel.layout = (1, 1, 1)\n",
"panel.projection = 'area'\n",
"panel.area = 'ehlf'\n",
"panel.layers = ['coastline', 'borders', 'states']\n",
"panel.left_title = f'SST (C) and MSLP'\n",
"panel.right_title = f'Valid: {date} UTC'\n",
"panel.plots = [sst, mslp]\n",
"\n",
"# Bringing it all together\n",
"pc = declarative.PanelContainer()\n",
"pc.size = (10, 12)\n",
"pc.panels = [panel]\n",
"\n",
"pc.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SST and MSLP Analysis\n",
"\n",
"In the above image we plotted, there appears to be \"warm\" sea surface temperatures (SSTs) underneath\n",
"the developing and moving cyclone. The Gulf Stream is bringing the warm surface water from\n",
"southern latitudes along the Atlantic coast. The SST values are between 20-25C, which is fairly\n",
"warm for March and would likely be helping the cyclone to be stronger due to the resultant\n",
"latent heat release.\n",
"\n",
"But how do we know that these are warm SST values for March? This is where it would be useful\n",
"to look at the SST anomaly values to assess if the temperatures are in fact a little or a lot\n",
"warmer than a thirty year average."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plot SST Anomaly and MSLP Data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sst = declarative.RasterPlot()\n",
"sst.data = ds_sst\n",
"sst.field = 'anom'\n",
"sst.colormap = 'coolwarm'\n",
"sst.colorbar = 'horizontal'\n",
"sst.image_range = (-13, 13)\n",
"\n",
"mslp = declarative.ContourPlot()\n",
"mslp.data = ds\n",
"mslp.field = 'Pressure_reduced_to_MSL_msl'\n",
"mslp.time = date\n",
"mslp.contours = range(0, 2000, 4)\n",
"mslp.plot_units = 'hPa'\n",
"mslp.smooth_field = 2\n",
"mslp.clabels = True\n",
"\n",
"# Panel for plot with Map features\n",
"panel = declarative.MapPanel()\n",
"panel.layout = (1, 1, 1)\n",
"panel.projection = 'area'\n",
"panel.area = 'ehlf'\n",
"panel.layers = ['coastline', 'borders', 'states']\n",
"panel.left_title = f'SST Anom. (C) and MSLP'\n",
"panel.right_title = f'Valid: {date} UTC'\n",
"panel.plots = [sst, mslp]\n",
"\n",
"# Bringing it all together\n",
"pc = declarative.PanelContainer()\n",
"pc.size = (10, 12)\n",
"pc.panels = [panel]\n",
"\n",
"pc.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SST Anomaly and MSLP Analysis\n",
"\n",
"In the above figure, we get a more nuanced insight into the seasonal nature\n",
"of the SST values. There are regions surrounding the midlatitude cyclone that\n",
"are quite a bit warmer than the 30 year average, but also some areas that are\n",
"slightly cooler. Of particular note is that just to the north of the cyclone -\n",
"its likely direction of motion - is a strip of warmer than average SSTs, but\n",
"not where we had the warmest SSTs overall. This is interesting because while\n",
"the water is colder, its not as cold is it would normally be, thus likely\n",
"enhancing the latent heat release effect during this cyclones life cycle. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion\n",
"\n",
"In this analysis we have only investigated a single time to compare the SSTs and SST anomalies\n",
"with the observed MSLP of a developing midlatitude cyclone. From the data, it appears likely\n",
"that the warm SSTs along the Atlantic coast were at least partially responsible for the overall\n",
"strength of the deepening cyclone. It would be better to analyze multiple times to observe the\n",
"full evolution of the cyclone and note any changes in the SSTs as it move up the Atlantic seaboard."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "main",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}