A brief overview of recent deployments of Canadian floats in polar oceans.
In this post we will summarize recent polar deployments of NKE ARVOR and look at their initial data. The deployments occurred in the Beaufort Sea in the Arctic Ocean, North of Alaska/Northwest Territories and the Ross Sea in the Southern Ocean. Ice avoidance parameters for each region will be shown.
All data will be pulled from the GDAC using argopy, code can be expanded in each section.
### imports and setup
import argopy
from pathlib import Path
from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.path as mpath
import cmocean.cm as cmo
import seaborn as sns
set(style="ticks", palette="colorblind")
sns.
import cartopy.crs as ccrs
import cartopy.feature as cfeature
Recent polar region deployments consist of 2 floats (4902610, 4902611) deployed in the Beaufort Sea by the Louis S. St. Laurent in September 2023, and 5 floats (4902664, 4902665, 4902667, 4902668, 4902669) deployed in the Ross Sea by the Italian ship Laura Bassi.
# define some useful mapping functions
def polarCentral_set_latlim(lat_lims, ax):
-180, 180, lat_lims[0], lat_lims[1]], ccrs.PlateCarree())
ax.set_extent([# Compute a circle in axes coordinates, which we can use as a boundary
# for the map. We can pan/zoom as much as we like - the boundary will be
# permanently circular.
= np.linspace(0, 2*np.pi, 100)
theta = [0.5, 0.5], 0.5
center, radius = np.vstack([np.sin(theta), np.cos(theta)]).T
verts = mpath.Path(verts * radius + center)
circle
=ax.transAxes)
ax.set_boundary(circle, transform
def add_map_features(ax):
ax.coastlines()= ax.gridlines()
gl
ax.add_feature(cfeature.BORDERS)
ax.add_feature(cfeature.LAND)= ax.gridlines(draw_labels=True)
gl
# wmo numbers of the floats
= [4902610, 4902611]
beaufort_wmos = [4902664, 4902665, 4902667, 4902668, 4902669]
ross_wmos
# grab Argo index for each group
= argopy.ArgoIndex().load()
index = index.search_wmo(beaufort_wmos).to_dataframe()
beaufort_ix = index.search_wmo(ross_wmos).to_dataframe()
ross_ix
# geo axis figures
= plt.figure(constrained_layout=True)
fig = [
axes 1, 2, 1, projection=ccrs.NorthPolarStereo()),
fig.add_subplot(1, 2, 2, projection=ccrs.SouthPolarStereo())
fig.add_subplot(
]
# bathymetry for plot
= Path('/Users/GordonC/Documents/data/GEBCO/GEBCO_2020.nc')
bath_file = Dataset(bath_file)
bath = bath['lat'][:]
blat = bath['lon'][:]
blon = bath['elevation'][:]
elev
# subset/decimate bathymetry - really big array
= np.logical_or(blat > 60, blat < -65)
iy
= blat[iy]
blat = elev[iy,:]
elev = -np.ma.masked_array(elev.data, elev > 0)
elev
= 20
N = blat[::N]
blat = blon[::N]
blon = elev[::N,:]
elev = elev[:,::N]
elev
for ix, ax in zip([beaufort_ix, ross_ix], axes):
# add bathymetry
= ax.contourf(
im list(range(0, 3800, 200)),
blon, blat, elev, =ccrs.PlateCarree(),
transform=cmo.deep,
cmap=0, extend='max'
vmin
)
# plot profiles so far
sns.scatterplot(=ix, x='longitude', y='latitude',
data='wmo', ax=ax, palette='colorblind',
hue=ccrs.PlateCarree()
transform
)
add_map_features(ax)
# move legend so somewhere more friendly
0].legend(loc=3, bbox_to_anchor=(-0.25, 0.0))
axes[1].legend(loc=4, bbox_to_anchor=(1.25, 0.0))
axes[
# set limits
65, 90], axes[0])
polarCentral_set_latlim([-70, -90], axes[1])
polarCentral_set_latlim([
0].set_title('Arctic Ocean - Beaufort Sea upper left', loc='left', fontsize=8, fontweight='bold')
axes[1].set_title('Southern Ocean - Ross Sea lower left', loc='left', fontsize=8, fontweight='bold')
axes[
plt.show()
In addition to the basic configuration described here, complete ice avoidance parameters can be found on the Argo Canada data management github page. The Ice Sensing Algorithm (ISA) works by measuring temperatures in a defined near-surface depth window, and if the median temperature is lower than the threshold temperature set by the user, inferring that there will be ice coverage above. Clearly, the proper threshold temperature will depend on the region and water properties, and so should be carefully selected.
Parameter | Beaufort.Sea.Value | Ross.Sea.Value |
---|---|---|
Start Pressure Detection | 20.0 | 50.000 |
Stop Pressure Detection | 10.0 | 30.000 |
Temperature Threshold | -1.8 | -1.225 |
In the Beaufort Sea, both floats completed two profiles before going under the ice. We hope to hear from both floats towards the end of this summer/early fall.
In the Ross Sea, one floats (4902665) appears to have broken its conductivity cell upon deployment, perhaps due to icing or temperature shock. Salinity data exists for the first profile, but is all bad. We have not heard from this float since, so it has either completely failed or gone under the ice. There is a small chance if it went under the ice that future data might be viable if the conductivity cell had frozen but not broken, and the ice melts off while the float is at depth (~0.5\(^\circ\)C water).
The other 4 floats deployed in the Ross Sea all had successful deployments. For the first part of their mission (up to 2 weeks for some floats, a few days for others) they performed near-daily (31 hour) cycles in order to maximize data collection before they go under the ice. At the end of February they were switched back to near 10-day (235 hour) cycles so that they do not over-collect data while under the ice and run out of onboard memory space.
= df = argopy.DataFetcher().float(beaufort_wmos).to_dataframe()
beaufort_df = argopy.DataFetcher().float(ross_wmos).to_dataframe()
ross_df
= plt.subplots(2, 2, sharex=False, sharey=True, constrained_layout=True)
fig, axes for axrow, varname in zip(axes, ['TEMP', 'PSAL']):
for ax, df in zip(axrow, [beaufort_df, ross_df]):
# remove bad conductivity values from one float w/ broken cell
< 28] = np.nan
df.PSAL.loc[df.PSAL
sns.scatterplot(=df, x=varname, y='PRES',
data='PLATFORM_NUMBER',
hue='colorblind', ax=ax, linewidth=0.2
palette
)= axes[0,0].set_ylim((2050, -50))
_ = axes[0,0].set_title('Beaufort Sea', loc='left', fontweight='bold')
_ = axes[0,1].set_title('Ross Sea', loc='left', fontweight='bold')
_ = axes[0,0].legend(loc=4)
_ = axes[0,1].legend(loc=3)
_ = axes[1,0].get_legend().remove()
_ = axes[1,1].get_legend().remove()
_ 1.66*fig.get_figheight())
fig.set_size_inches(fig.get_figwidth(), plt.show()
For attribution, please cite this work as
Gordon (2024, Feb. 29). Argo Canada Development Blog: Canadian Polar Deployments. Retrieved from https://argocanada.github.io/blog/posts/2024-02-28-canadian-polar-deployments/
BibTeX citation
@misc{gordon2024canadian, author = {Gordon, Christopher}, title = {Argo Canada Development Blog: Canadian Polar Deployments}, url = {https://argocanada.github.io/blog/posts/2024-02-28-canadian-polar-deployments/}, year = {2024} }