Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add osnap T S climtransects #899

Open
wants to merge 13 commits into
base: develop
Choose a base branch
from
1 change: 1 addition & 0 deletions docs/users_guide/analysis_tasks.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Analysis Tasks
tasks/meridionalHeatTransport
tasks/streamfunctionMOC
tasks/indexNino34
tasks/osnapTransects
tasks/woceTransects
tasks/soseTransects
tasks/geojsonTransects
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
133 changes: 133 additions & 0 deletions docs/users_guide/tasks/osnapTransects.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
.. _task_osnapTransects:

osnapTransects
=============

An analysis task for interpolating MPAS fields to
`Overturning in the Subpolar North Atlantic Program (OSNAP)`_ transects
and comparing them with ship-based observations.

Component and Tags::

component: ocean
tags: climatology, transect, osnap

Configuration Options
---------------------

The following configuration options are available for this task::

[osnapTransects]
## options related to plotting model vs. OSNAP transects.

# Times for comparison times (JFM, JAS, ANN)
seasons = ['ANN']

# The approximate horizontal resolution (in km) of each transect. Latitude/
# longitude between observation points will be subsampled at this interval.
# Use 'obs' to indicate no subsampling.
horizontalResolution = obs

# The name of the vertical comparison grid. Valid values are 'mpas' for the
# MPAS vertical grid, 'obs' to use the locations of observations or
# any other name if the vertical grid is defined by 'verticalComparisonGrid'
# verticalComparisonGridName = obs
verticalComparisonGridName = uniform_0_to_4000m_at_10m
#verticalComparisonGridName = mpas

# The vertical comparison grid if 'verticalComparisonGridName' is not 'mpas' or
# 'obs'. This should be numpy array of (typically negative) elevations (in m).
verticalComparisonGrid = numpy.linspace(0, -4000, 401)

# The minimum weight of a destination cell after remapping. Any cell with
# weights lower than this threshold will therefore be masked out.
renormalizationThreshold = 0.01


[osnapTemperatureTransects]
## options related to plotting OSNAP transects of potential temperature

# colormap for model/observations
colormapNameResult = RdYlBu_r
# the type of norm used in the colormap (linear, log, or symLog)
normTypeResult = linear
# A dictionary with keywords for the norm
normArgsResult = {'vmin': 0.0, 'vmax': 18.0}
# color indices into colormapName for filled contours
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsResult = [0, 1, 2, 3, 4, 6, 8, 10, 14, 18]
# place the ticks automatically by default
# colorbarTicksResult = numpy.linspace(0.0, 18.0, 9)
# contour line levels
contourLevelsResult = np.arange(1.0, 18.0, 2.0)

# colormap for differences
colormapNameDifference = RdBu_r
# the type of norm used in the colormap (linear, log, or symLog)
normTypeDifference = linear
# A dictionary with keywords for the norm
normArgsDifference = {'vmin': -2.0, 'vmax': 2.0}
# color indices into colormapName for filled contours
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsDifference = [-2, -1.5, -1.25, -1, -0.2, 0, 0.2, 1, 1.25, 1.5, 2]
# place the ticks automatically by default
# colorbarTicksDifference = numpy.linspace(-2.0, 2.0, 9)
# contour line levels
contourLevelsDifference = np.arange(-1.8, 2.0, 0.4)



[osnapSalinityTransects]
## options related to plotting OSNAP transects of salinity

# colormap for model/observations
colormapNameResult = BuOr
# the type of norm used in the colormap (linear, log, or symLog)
normTypeResult = linear
# A dictionary with keywords for the norm
normArgsResult = {'vmin': 33.0, 'vmax': 36.0}
# color indices into colormapName for filled contours
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsResult = [33, 34, 34.25, 34.5, 34.6, 34.7, 34.8, 34.9, 35, 36]
# place the ticks automatically by default
# colorbarTicksResult = numpy.linspace(33.0, 36.0, 9)
# contour line levels
contourLevelsResult = np.arange(33.3, 36.0, 0.3)

# colormap for differences
colormapNameDifference = RdBu_r
# the type of norm used in the colormap (linear, log, or symLog)
normTypeDifference = linear
# A dictionary with keywords for the norm
normArgsDifference = {'vmin': -1.0, 'vmax': 1.0}
# color indices into colormapName for filled contours
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsDifference = [-1, -0.5, -0.2, -0.05, -0.02, 0, 0.02, 0.05, 0.2, 0.5, 1]
# place the ticks automatically by default
# colorbarTicksDifference = numpy.linspace(-1.0, 1.0, 9)
# contour line levels
contourLevelsDifference = np.arange(-0.9, 1.0, 0.4)

For details on these configuration options, see:
* :ref:`config_transects`
* :ref:`config_remapping`
* :ref:`config_colormaps`
* :ref:`config_seasons`

Observations
------------

:ref:`osnap`

Example Result
--------------

.. image:: examples/osnap_transect.png
:width: 500 px
:align: center

.. _`Overturning in the Subpolar North Atlantic Program (OSNAP)`: http://www.o-snap.org
3 changes: 3 additions & 0 deletions mpas_analysis/__main__.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,9 @@ def build_analysis_list(config, controlConfig):
analyses.append(ocean.WoceTransects(config, oceanClimatologyTasks['avg'],
controlConfig))

analyses.append(ocean.OsnapTransects(config, oceanClimatologyTasks['avg'],
controlConfig))

analyses.append(ocean.SoseTransects(config, oceanClimatologyTasks['avg'],
controlConfig))

Expand Down
125 changes: 125 additions & 0 deletions mpas_analysis/default.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,7 @@ argoSubdirectory = ARGO
woa18Subdirectory = WOA18
schmidtkoSubdirectory = Schmidtko
woceSubdirectory = WOCE
osnapSubdirectory = OSNAP
no3Subdirectory = BGC/NO3
po4Subdirectory = BGC/PO4
sio3Subdirectory = BGC/SiO3
Expand Down Expand Up @@ -2971,6 +2972,130 @@ compareAsContoursOnSinglePlot = True
contourLevelsResult = [1027.2, 1027.4, 1027.6, 1027.7, 1027.8, 1027.85, 1027.9, 1027.95, 1028.0]


[osnapTransects]
## options related to plotting model vs. Overturning in the Subpolar North Atlantic Program
## (OSNAP) transects.

# Times for comparison times (valid values: JFM, JAS, ANN)
seasons = ['ANN']

# The approximate horizontal resolution (in km) of each transect. Latitude/
# longitude between observation points will be subsampled at this interval.
# Use 'obs' to indicate no subsampling. Use 'mpas' to indicate plotting of
# model data on the native grid, in which case comparison with observations
# will take place on the observation grid.
horizontalResolution = mpas
#horizontalResolution = obs
#horizontalResolution = 5

# Horizontal bounds of the plot (in km), or an empty list for automatic bounds
# The bounds are a 2-element list of the minimum and maximum distance along the
# transect. Note: only East and West are valid transects
horizontalBounds = {'OSNAP_East': [],
'OSNAP_West': []}

# The name of the vertical comparison grid. Valid values are 'mpas' for the
# MPAS vertical grid, 'obs' to use the locations of observations or
# any other name if the vertical grid is defined by 'verticalComparisonGrid'.
# If horizontalResolution is 'mpas', model data (both main and control) will be
# plotted on the MPAS vertical grid, regardless of the comparison grid.
verticalComparisonGridName = mpas
#verticalComparisonGridName = obs
#verticalComparisonGridName = uniform_0_to_4000m_at_10m

# The vertical comparison grid if 'verticalComparisonGridName' is not 'mpas' or
# 'obs'. This should be numpy array of (typically negative) elevations (in m).
# The first and last entries are used as axis bounds for 'mpas' and 'obs'
# vertical comparison grids
verticalComparisonGrid = numpy.linspace(0, -4000, 401)

# A range for the y axis (if any)
verticalBounds = [-4000., 0.]

# The minimum weight of a destination cell after remapping. Any cell with
# weights lower than this threshold will therefore be masked out.
renormalizationThreshold = 0.01


[osnapTemperatureTransects]
## options related to plotting OSNAP transects of potential temperature

# colormap for model/observations
colormapNameResult = RdYlBu_r
# whether the colormap is indexed or continuous
colormapTypeResult = continuous
# the type of norm used in the colormap (linear, log, or symLog)
normTypeResult = linear
# A dictionary with keywords for the norm
normArgsResult = {'vmin': 0.0, 'vmax': 18.0}
# color indices into colormapName for filled contours
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsResult = [0, 1, 2, 3, 4, 6, 8, 10, 14, 18]
# place the ticks automatically by default
# colorbarTicksResult = numpy.linspace(0.0, 18.0, 9)
# contour line levels (use [] for automatic contour selection, 'none' for no
# contour lines)
contourLevelsResult = np.arange(1.0, 18.0, 2.0)

# colormap for differences
colormapNameDifference = balance
# whether the colormap is indexed or continuous
colormapTypeDifference = continuous
# the type of norm used in the colormap (linear, log, or symLog)
normTypeDifference = linear
# A dictionary with keywords for the norm
normArgsDifference = {'vmin': -3.0, 'vmax': 3.0}
# color indices into colormapName for filled contours
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsDifference = [-2, -1.5, -1.25, -1, -0.2, 0, 0.2, 1, 1.25, 1.5, 2]
# place the ticks automatically by default
# colorbarTicksDifference = numpy.linspace(-2.0, 2.0, 9)
# contour line levels (use [] for automatic contour selection, 'none' for no
# contour lines)
contourLevelsDifference = np.arange(-1.8, 2.0, 0.4)

[osnapSalinityTransects]
## options related to plotting OSNAP transects of salinity

# colormap for model/observations
colormapNameResult = haline
# whether the colormap is indexed or continuous
colormapTypeResult = continuous
# the type of norm used in the colormap (linear, log, or symLog)
normTypeResult = linear
# A dictionary with keywords for the norm
normArgsResult = {'vmin': 33.0, 'vmax': 36.0}
# color indices into colormapName for filled contours
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsResult = [33, 34, 34.25, 34.5, 34.6, 34.7, 34.8, 34.9, 35, 36]
# place the ticks automatically by default
# colorbarTicksResult = numpy.linspace(33.0, 36.0, 9)
# contour line levels (use [] for automatic contour selection, 'none' for no
# contour lines)
contourLevelsResult = np.arange(33.3, 36.0, 0.3)

# colormap for differences
colormapNameDifference = balance
# whether the colormap is indexed or continuous
colormapTypeDifference = continuous
# the type of norm used in the colormap (linear, log, or symLog)
normTypeDifference = linear
# A dictionary with keywords for the norm
normArgsDifference = {'vmin': -1.0, 'vmax': 1.0}
# color indices into colormapName for filled contours
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
# colormap levels/values for contour boundaries
#colorbarLevelsDifference = [-1, -0.5, -0.2, -0.05, -0.02, 0, 0.02, 0.05, 0.2, 0.5, 1]
# place the ticks automatically by default
# colorbarTicksDifference = numpy.linspace(-1.0, 1.0, 9)
# contour line levels (use [] for automatic contour selection, 'none' for no
# contour lines)
contourLevelsDifference = np.arange(-0.9, 1.0, 0.4)


[geojsonTransects]
## options related to plotting model transects at points determined by a
## geojson file. To generate your own geojson file, go to:
Expand Down
60 changes: 60 additions & 0 deletions mpas_analysis/obs/observational_datasets.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1479,6 +1479,66 @@
</nameInDocs>
</observation>

<observation>
<name>
OSNAP Temperature Salinity and Velocity Climatology
</name>
<component>
ocean
</component>
<description>
OSNAP is designed to provide a continuous record of the full-water
column, trans-basin fluxes of heat, mass and freshwater in the subpolar
North Atlantic. It consists of two legs: one extending from southern
Labrador to the southwestern tip of Greenland across the mouth of the
Labrador Sea (OSNAP West), and the second from the southeastern tip of
Greenland to Scotland (OSNAP East). The observing system also includes
subsurface floats (OSNAP Floats) in order to trace the pathways of
overflow waters in the basin and to assess the connectivity of currents
crossing the OSNAP line. The location of the OSNAP East and West legs
purposefully melds with a number of long-term observational efforts in
the North Atlantic: the Canadian repeat AR7W program in the Labrador
Sea; the German Labrador Sea western boundary array at 53°N; the
global Ocean Observatories Initiative node to be placed in the
southwestern Irminger Sea; the repeat A1E/AR7E hydrographic sections
across the Irminger and Iceland basins; and the Ellett line in the
Rockall region. Importantly, this observing system, in conjunction with
the RAPID/MOCHA array at 26ºN and the EU THOR/NACLIM program, will
provide a comprehensive measure of the Atlantic Meridional Overturning
Circulation (AMOC) and provide a means to evaluate intergyre
connectivity in the North Atlantic. OSNAP is a collaborative effort,
which includes several countries including US, Canada, China, France,
Germany, Netherlands and the UK.
</description>
<source>
[Overturning in the Subpolar North Atlantic Program (OSNAP) website]
(https://www.o-snap.org/data-access/)
</source>
<releasePolicy>
Acknowledgment: OSNAP data were collected and made freely available by the OSNAP (Overturning in the Subpolar North Atlantic Program) project and all the national programs that contribute to it (www.o-snap.org).
</releasePolicy>
<references>
</references>
<bibtex>
</bibtex>
<dataUrls>
- https://duke.app.box.com/s/4qbi9ocpvmxdv44wnx2g5rgoyy85jmz6
</dataUrls>
<preprocessing>
- preprocess_observations/preprocessingOSNAP30day.ipynb
</preprocessing>
<tasks>
- climatologyMapOSNAP
</tasks>
<subdirectory>
Ocean/OSNAP
</subdirectory>
<nameInDocs>
osnap_t_s
</nameInDocs>
</observation>


<!--
<observation>
<name>
Expand Down
1 change: 1 addition & 0 deletions mpas_analysis/ocean/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
RegionalTSDiagrams

from mpas_analysis.ocean.woce_transects import WoceTransects
from mpas_analysis.ocean.osnap_transects import OsnapTransects
from mpas_analysis.ocean.sose_transects import SoseTransects
from mpas_analysis.ocean.geojson_transects import GeojsonTransects

Expand Down
Loading