Skip to content

Commit 99071b9

Browse files
authored
Merge pull request #899 from alicebarthel/add_OSNAP_TSclimtransects
Add osnap T S climtransects
2 parents 5831d88 + 30cb33c commit 99071b9

File tree

9 files changed

+946
-2
lines changed

9 files changed

+946
-2
lines changed

docs/users_guide/analysis_tasks.rst

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Analysis Tasks
3434
tasks/meridionalHeatTransport
3535
tasks/streamfunctionMOC
3636
tasks/indexNino34
37+
tasks/osnapTransects
3738
tasks/woceTransects
3839
tasks/soseTransects
3940
tasks/woaTransects
Loading
+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
.. _task_osnapTransects:
2+
3+
osnapTransects
4+
=============
5+
6+
An analysis task for interpolating MPAS fields to
7+
`Overturning in the Subpolar North Atlantic Program (OSNAP)`_ transects
8+
and comparing them with ship-based observations.
9+
10+
Component and Tags::
11+
12+
component: ocean
13+
tags: climatology, transect, osnap
14+
15+
Configuration Options
16+
---------------------
17+
18+
The following configuration options are available for this task::
19+
20+
[osnapTransects]
21+
## options related to plotting model vs. OSNAP transects.
22+
23+
# Times for comparison times (JFM, JAS, ANN)
24+
seasons = ['ANN']
25+
26+
# The approximate horizontal resolution (in km) of each transect. Latitude/
27+
# longitude between observation points will be subsampled at this interval.
28+
# Use 'obs' to indicate no subsampling.
29+
horizontalResolution = obs
30+
31+
# The name of the vertical comparison grid. Valid values are 'mpas' for the
32+
# MPAS vertical grid, 'obs' to use the locations of observations or
33+
# any other name if the vertical grid is defined by 'verticalComparisonGrid'
34+
# verticalComparisonGridName = obs
35+
verticalComparisonGridName = uniform_0_to_4000m_at_10m
36+
#verticalComparisonGridName = mpas
37+
38+
# The vertical comparison grid if 'verticalComparisonGridName' is not 'mpas' or
39+
# 'obs'. This should be numpy array of (typically negative) elevations (in m).
40+
verticalComparisonGrid = numpy.linspace(0, -4000, 401)
41+
42+
# The minimum weight of a destination cell after remapping. Any cell with
43+
# weights lower than this threshold will therefore be masked out.
44+
renormalizationThreshold = 0.01
45+
46+
47+
[osnapTemperatureTransects]
48+
## options related to plotting OSNAP transects of potential temperature
49+
50+
# colormap for model/observations
51+
colormapNameResult = RdYlBu_r
52+
# the type of norm used in the colormap (linear, log, or symLog)
53+
normTypeResult = linear
54+
# A dictionary with keywords for the norm
55+
normArgsResult = {'vmin': 0.0, 'vmax': 18.0}
56+
# color indices into colormapName for filled contours
57+
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
58+
# colormap levels/values for contour boundaries
59+
#colorbarLevelsResult = [0, 1, 2, 3, 4, 6, 8, 10, 14, 18]
60+
# place the ticks automatically by default
61+
# colorbarTicksResult = numpy.linspace(0.0, 18.0, 9)
62+
# contour line levels
63+
contourLevelsResult = np.arange(1.0, 18.0, 2.0)
64+
65+
# colormap for differences
66+
colormapNameDifference = RdBu_r
67+
# the type of norm used in the colormap (linear, log, or symLog)
68+
normTypeDifference = linear
69+
# A dictionary with keywords for the norm
70+
normArgsDifference = {'vmin': -2.0, 'vmax': 2.0}
71+
# color indices into colormapName for filled contours
72+
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
73+
# colormap levels/values for contour boundaries
74+
#colorbarLevelsDifference = [-2, -1.5, -1.25, -1, -0.2, 0, 0.2, 1, 1.25, 1.5, 2]
75+
# place the ticks automatically by default
76+
# colorbarTicksDifference = numpy.linspace(-2.0, 2.0, 9)
77+
# contour line levels
78+
contourLevelsDifference = np.arange(-1.8, 2.0, 0.4)
79+
80+
81+
82+
[osnapSalinityTransects]
83+
## options related to plotting OSNAP transects of salinity
84+
85+
# colormap for model/observations
86+
colormapNameResult = BuOr
87+
# the type of norm used in the colormap (linear, log, or symLog)
88+
normTypeResult = linear
89+
# A dictionary with keywords for the norm
90+
normArgsResult = {'vmin': 33.0, 'vmax': 36.0}
91+
# color indices into colormapName for filled contours
92+
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
93+
# colormap levels/values for contour boundaries
94+
#colorbarLevelsResult = [33, 34, 34.25, 34.5, 34.6, 34.7, 34.8, 34.9, 35, 36]
95+
# place the ticks automatically by default
96+
# colorbarTicksResult = numpy.linspace(33.0, 36.0, 9)
97+
# contour line levels
98+
contourLevelsResult = np.arange(33.3, 36.0, 0.3)
99+
100+
# colormap for differences
101+
colormapNameDifference = RdBu_r
102+
# the type of norm used in the colormap (linear, log, or symLog)
103+
normTypeDifference = linear
104+
# A dictionary with keywords for the norm
105+
normArgsDifference = {'vmin': -1.0, 'vmax': 1.0}
106+
# color indices into colormapName for filled contours
107+
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
108+
# colormap levels/values for contour boundaries
109+
#colorbarLevelsDifference = [-1, -0.5, -0.2, -0.05, -0.02, 0, 0.02, 0.05, 0.2, 0.5, 1]
110+
# place the ticks automatically by default
111+
# colorbarTicksDifference = numpy.linspace(-1.0, 1.0, 9)
112+
# contour line levels
113+
contourLevelsDifference = np.arange(-0.9, 1.0, 0.4)
114+
115+
For details on these configuration options, see:
116+
* :ref:`config_transects`
117+
* :ref:`config_remapping`
118+
* :ref:`config_colormaps`
119+
* :ref:`config_seasons`
120+
121+
Observations
122+
------------
123+
124+
:ref:`osnap`
125+
126+
Example Result
127+
--------------
128+
129+
.. image:: examples/osnap_transect.png
130+
:width: 500 px
131+
:align: center
132+
133+
.. _`Overturning in the Subpolar North Atlantic Program (OSNAP)`: http://www.o-snap.org

mpas_analysis/__main__.py

100755100644
+6-2
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,12 @@ def build_analysis_list(config, controlConfig):
226226
analyses.append(ocean.WoceTransects(config, oceanClimatologyTasks['avg'],
227227
controlConfig))
228228

229-
analyses.append(ocean.AntshipTransects(config, oceanClimatologyTasks['avg'],
230-
controlConfig))
229+
analyses.append(ocean.AntshipTransects(config,
230+
oceanClimatologyTasks['avg'],
231+
controlConfig))
232+
233+
analyses.append(ocean.OsnapTransects(config, oceanClimatologyTasks['avg'],
234+
controlConfig))
231235

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

mpas_analysis/default.cfg

+125
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@ woa23Subdirectory = WOA23
529529
schmidtkoSubdirectory = Schmidtko
530530
woceSubdirectory = WOCE
531531
antshipSubdirectory = AntShip
532+
osnapSubdirectory = OSNAP
532533
no3Subdirectory = BGC/NO3
533534
po4Subdirectory = BGC/PO4
534535
sio3Subdirectory = BGC/SiO3
@@ -3228,6 +3229,130 @@ compareAsContoursOnSinglePlot = True
32283229
contourLevelsResult = [1027.2, 1027.4, 1027.6, 1027.7, 1027.8, 1027.85, 1027.9, 1027.95, 1028.0]
32293230

32303231

3232+
[osnapTransects]
3233+
## options related to plotting model vs. Overturning in the Subpolar North Atlantic Program
3234+
## (OSNAP) transects.
3235+
3236+
# Times for comparison times (valid values: JFM, JAS, ANN)
3237+
seasons = ['ANN']
3238+
3239+
# The approximate horizontal resolution (in km) of each transect. Latitude/
3240+
# longitude between observation points will be subsampled at this interval.
3241+
# Use 'obs' to indicate no subsampling. Use 'mpas' to indicate plotting of
3242+
# model data on the native grid, in which case comparison with observations
3243+
# will take place on the observation grid.
3244+
horizontalResolution = mpas
3245+
#horizontalResolution = obs
3246+
#horizontalResolution = 5
3247+
3248+
# Horizontal bounds of the plot (in km), or an empty list for automatic bounds
3249+
# The bounds are a 2-element list of the minimum and maximum distance along the
3250+
# transect. Note: only East and West are valid transects
3251+
horizontalBounds = {'OSNAP_East': [],
3252+
'OSNAP_West': []}
3253+
3254+
# The name of the vertical comparison grid. Valid values are 'mpas' for the
3255+
# MPAS vertical grid, 'obs' to use the locations of observations or
3256+
# any other name if the vertical grid is defined by 'verticalComparisonGrid'.
3257+
# If horizontalResolution is 'mpas', model data (both main and control) will be
3258+
# plotted on the MPAS vertical grid, regardless of the comparison grid.
3259+
verticalComparisonGridName = mpas
3260+
#verticalComparisonGridName = obs
3261+
#verticalComparisonGridName = uniform_0_to_4000m_at_10m
3262+
3263+
# The vertical comparison grid if 'verticalComparisonGridName' is not 'mpas' or
3264+
# 'obs'. This should be numpy array of (typically negative) elevations (in m).
3265+
# The first and last entries are used as axis bounds for 'mpas' and 'obs'
3266+
# vertical comparison grids
3267+
verticalComparisonGrid = numpy.linspace(0, -4000, 401)
3268+
3269+
# A range for the y axis (if any)
3270+
verticalBounds = [-4000., 0.]
3271+
3272+
# The minimum weight of a destination cell after remapping. Any cell with
3273+
# weights lower than this threshold will therefore be masked out.
3274+
renormalizationThreshold = 0.01
3275+
3276+
3277+
[osnapTemperatureTransects]
3278+
## options related to plotting OSNAP transects of potential temperature
3279+
3280+
# colormap for model/observations
3281+
colormapNameResult = RdYlBu_r
3282+
# whether the colormap is indexed or continuous
3283+
colormapTypeResult = continuous
3284+
# the type of norm used in the colormap (linear, log, or symLog)
3285+
normTypeResult = linear
3286+
# A dictionary with keywords for the norm
3287+
normArgsResult = {'vmin': 0.0, 'vmax': 18.0}
3288+
# color indices into colormapName for filled contours
3289+
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
3290+
# colormap levels/values for contour boundaries
3291+
#colorbarLevelsResult = [0, 1, 2, 3, 4, 6, 8, 10, 14, 18]
3292+
# place the ticks automatically by default
3293+
# colorbarTicksResult = numpy.linspace(0.0, 18.0, 9)
3294+
# contour line levels (use [] for automatic contour selection, 'none' for no
3295+
# contour lines)
3296+
contourLevelsResult = np.arange(1.0, 18.0, 2.0)
3297+
3298+
# colormap for differences
3299+
colormapNameDifference = balance
3300+
# whether the colormap is indexed or continuous
3301+
colormapTypeDifference = continuous
3302+
# the type of norm used in the colormap (linear, log, or symLog)
3303+
normTypeDifference = linear
3304+
# A dictionary with keywords for the norm
3305+
normArgsDifference = {'vmin': -3.0, 'vmax': 3.0}
3306+
# color indices into colormapName for filled contours
3307+
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
3308+
# colormap levels/values for contour boundaries
3309+
#colorbarLevelsDifference = [-2, -1.5, -1.25, -1, -0.2, 0, 0.2, 1, 1.25, 1.5, 2]
3310+
# place the ticks automatically by default
3311+
# colorbarTicksDifference = numpy.linspace(-2.0, 2.0, 9)
3312+
# contour line levels (use [] for automatic contour selection, 'none' for no
3313+
# contour lines)
3314+
contourLevelsDifference = np.arange(-1.8, 2.0, 0.4)
3315+
3316+
[osnapSalinityTransects]
3317+
## options related to plotting OSNAP transects of salinity
3318+
3319+
# colormap for model/observations
3320+
colormapNameResult = haline
3321+
# whether the colormap is indexed or continuous
3322+
colormapTypeResult = continuous
3323+
# the type of norm used in the colormap (linear, log, or symLog)
3324+
normTypeResult = linear
3325+
# A dictionary with keywords for the norm
3326+
normArgsResult = {'vmin': 33.0, 'vmax': 36.0}
3327+
# color indices into colormapName for filled contours
3328+
#colormapIndicesResult = [0, 40, 80, 110, 140, 170, 200, 230, 255]
3329+
# colormap levels/values for contour boundaries
3330+
#colorbarLevelsResult = [33, 34, 34.25, 34.5, 34.6, 34.7, 34.8, 34.9, 35, 36]
3331+
# place the ticks automatically by default
3332+
# colorbarTicksResult = numpy.linspace(33.0, 36.0, 9)
3333+
# contour line levels (use [] for automatic contour selection, 'none' for no
3334+
# contour lines)
3335+
contourLevelsResult = np.arange(33.3, 36.0, 0.3)
3336+
3337+
# colormap for differences
3338+
colormapNameDifference = balance
3339+
# whether the colormap is indexed or continuous
3340+
colormapTypeDifference = continuous
3341+
# the type of norm used in the colormap (linear, log, or symLog)
3342+
normTypeDifference = linear
3343+
# A dictionary with keywords for the norm
3344+
normArgsDifference = {'vmin': -1.0, 'vmax': 1.0}
3345+
# color indices into colormapName for filled contours
3346+
#colormapIndicesDifference = [0, 28, 57, 85, 113, 128, 128, 142, 170, 198, 227, 255]
3347+
# colormap levels/values for contour boundaries
3348+
#colorbarLevelsDifference = [-1, -0.5, -0.2, -0.05, -0.02, 0, 0.02, 0.05, 0.2, 0.5, 1]
3349+
# place the ticks automatically by default
3350+
# colorbarTicksDifference = numpy.linspace(-1.0, 1.0, 9)
3351+
# contour line levels (use [] for automatic contour selection, 'none' for no
3352+
# contour lines)
3353+
contourLevelsDifference = np.arange(-0.9, 1.0, 0.4)
3354+
3355+
32313356
[geojsonTransects]
32323357
## options related to plotting model transects at points determined by a
32333358
## geojson file. To generate your own geojson file, go to:

mpas_analysis/obs/observational_datasets.xml

+60
Original file line numberDiff line numberDiff line change
@@ -1597,6 +1597,66 @@
15971597
</nameInDocs>
15981598
</observation>
15991599

1600+
<observation>
1601+
<name>
1602+
OSNAP Temperature Salinity and Velocity Climatology
1603+
</name>
1604+
<component>
1605+
ocean
1606+
</component>
1607+
<description>
1608+
OSNAP is designed to provide a continuous record of the full-water
1609+
column, trans-basin fluxes of heat, mass and freshwater in the subpolar
1610+
North Atlantic. It consists of two legs: one extending from southern
1611+
Labrador to the southwestern tip of Greenland across the mouth of the
1612+
Labrador Sea (OSNAP West), and the second from the southeastern tip of
1613+
Greenland to Scotland (OSNAP East). The observing system also includes
1614+
subsurface floats (OSNAP Floats) in order to trace the pathways of
1615+
overflow waters in the basin and to assess the connectivity of currents
1616+
crossing the OSNAP line. The location of the OSNAP East and West legs
1617+
purposefully melds with a number of long-term observational efforts in
1618+
the North Atlantic: the Canadian repeat AR7W program in the Labrador
1619+
Sea; the German Labrador Sea western boundary array at 53°N; the
1620+
global Ocean Observatories Initiative node to be placed in the
1621+
southwestern Irminger Sea; the repeat A1E/AR7E hydrographic sections
1622+
across the Irminger and Iceland basins; and the Ellett line in the
1623+
Rockall region. Importantly, this observing system, in conjunction with
1624+
the RAPID/MOCHA array at 26ºN and the EU THOR/NACLIM program, will
1625+
provide a comprehensive measure of the Atlantic Meridional Overturning
1626+
Circulation (AMOC) and provide a means to evaluate intergyre
1627+
connectivity in the North Atlantic. OSNAP is a collaborative effort,
1628+
which includes several countries including US, Canada, China, France,
1629+
Germany, Netherlands and the UK.
1630+
</description>
1631+
<source>
1632+
[Overturning in the Subpolar North Atlantic Program (OSNAP) website]
1633+
(https://www.o-snap.org/data-access/)
1634+
</source>
1635+
<releasePolicy>
1636+
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).
1637+
</releasePolicy>
1638+
<references>
1639+
</references>
1640+
<bibtex>
1641+
</bibtex>
1642+
<dataUrls>
1643+
- https://duke.app.box.com/s/4qbi9ocpvmxdv44wnx2g5rgoyy85jmz6
1644+
</dataUrls>
1645+
<preprocessing>
1646+
- preprocess_observations/preprocessingOSNAP30day.ipynb
1647+
</preprocessing>
1648+
<tasks>
1649+
- climatologyMapOSNAP
1650+
</tasks>
1651+
<subdirectory>
1652+
Ocean/OSNAP
1653+
</subdirectory>
1654+
<nameInDocs>
1655+
osnap_t_s
1656+
</nameInDocs>
1657+
</observation>
1658+
1659+
16001660
<!--
16011661
<observation>
16021662
<name>

mpas_analysis/ocean/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454

5555
from mpas_analysis.ocean.woce_transects import WoceTransects
5656
from mpas_analysis.ocean.antship_transects import AntshipTransects
57+
from mpas_analysis.ocean.osnap_transects import OsnapTransects
5758
from mpas_analysis.ocean.sose_transects import SoseTransects
5859
from mpas_analysis.ocean.woa_transects import WoaTransects
5960
from mpas_analysis.ocean.geojson_transects import GeojsonTransects

0 commit comments

Comments
 (0)