From 9fb283ff9cccd0eb139e01fcba9ac6bf10ced94a Mon Sep 17 00:00:00 2001 From: Xylar Asay-Davis Date: Sat, 2 Nov 2024 18:22:20 -0500 Subject: [PATCH] Add a task that plots WOA23 transects For now, these are at the same locations as SOSE transects --- docs/conf.py | 2 +- docs/developers_guide/api.rst | 6 + docs/users_guide/analysis_tasks.rst | 1 + .../tasks/examples/woa23_transect.png | Bin 0 -> 120989 bytes docs/users_guide/tasks/woaTransects.rst | 191 +++++++++ mpas_analysis/__main__.py | 3 + mpas_analysis/default.cfg | 137 ++++++- mpas_analysis/obs/observational_datasets.xml | 2 +- mpas_analysis/ocean/__init__.py | 1 + mpas_analysis/ocean/sose_transects.py | 6 +- mpas_analysis/ocean/woa_transects.py | 370 ++++++++++++++++++ mpas_analysis/polar_regions.cfg | 76 ++++ 12 files changed, 789 insertions(+), 6 deletions(-) create mode 100644 docs/users_guide/tasks/examples/woa23_transect.png create mode 100644 docs/users_guide/tasks/woaTransects.rst create mode 100644 mpas_analysis/ocean/woa_transects.py diff --git a/docs/conf.py b/docs/conf.py index b72c49426..4be193f66 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -187,7 +187,7 @@ 'numpy': ('http://docs.scipy.org/doc/numpy/', None), 'xarray': ('http://xarray.pydata.org/en/stable/', None), 'geometric_features': - ('http://mpas-dev.github.io/geometric_features/stable/', None), + ('http://mpas-dev.github.io/geometric_features/main/', None), 'mpas_tools': ('http://mpas-dev.github.io/MPAS-Tools/stable/', None)} diff --git a/docs/developers_guide/api.rst b/docs/developers_guide/api.rst index 58665f168..1ed01fe8b 100644 --- a/docs/developers_guide/api.rst +++ b/docs/developers_guide/api.rst @@ -73,12 +73,16 @@ Ocean tasks ClimatologyMapAntarcticMelt ClimatologyMapSose ClimatologyMapVel + ClimatologyMapWoa ClimatologyMapArgoTemperature ClimatologyMapArgoSalinity ClimatologyMapWaves IndexNino34 MeridionalHeatTransport OceanHistogram + OceanRegionalProfiles + RegionalTSDiagrams + SoseTransects StreamfunctionMOC TimeSeriesOHCAnomaly TimeSeriesTemperatureAnomaly @@ -87,6 +91,8 @@ Ocean tasks TimeSeriesAntarcticMelt TimeSeriesOceanRegions TimeSeriesTransport + WoaTransects + WoceTransects .. currentmodule:: mpas_analysis.ocean.compute_anomaly_subtask diff --git a/docs/users_guide/analysis_tasks.rst b/docs/users_guide/analysis_tasks.rst index 60e1bfb2a..ae18168ec 100644 --- a/docs/users_guide/analysis_tasks.rst +++ b/docs/users_guide/analysis_tasks.rst @@ -36,6 +36,7 @@ Analysis Tasks tasks/indexNino34 tasks/woceTransects tasks/soseTransects + tasks/woaTransects tasks/geojsonTransects tasks/oceanRegionalProfiles tasks/regionalTSDiagrams diff --git a/docs/users_guide/tasks/examples/woa23_transect.png b/docs/users_guide/tasks/examples/woa23_transect.png new file mode 100644 index 0000000000000000000000000000000000000000..3b44f054b7f46448e23dab3ea70f1a973a39858d GIT binary patch literal 120989 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 JW1`LV{{thM0Ez$r literal 0 HcmV?d00001 diff --git a/docs/users_guide/tasks/woaTransects.rst b/docs/users_guide/tasks/woaTransects.rst new file mode 100644 index 000000000..86a4fdb0b --- /dev/null +++ b/docs/users_guide/tasks/woaTransects.rst @@ -0,0 +1,191 @@ +.. |deg| unicode:: U+00B0 .. degree sign + :trim: + +.. _task_woaTransects: + +woaTransects +============ + +An analysis task for computing meridional transects of MPAS fields at evenly +spaced latitudes around Antarctica and comparing them with results from the +`World Ocean Atlas 2023 (WOA23)`_. + +Component and Tags:: + + component: ocean + tags: climatology, transect, woa, publicObs + +Configuration Options +--------------------- + +The following configuration options are available for this task:: + + [woaTransects] + ## options related to plotting model vs. World Ocean Atlas 2023 (WOA23) + ## transects. + + # Times for comparison times (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, + # Nov, Dec, JFM, AMJ, JAS, OND, ANN) + seasons = ['ANN', 'JFM', 'JAS'] + + # 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 + + # 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 = mpas + #verticalComparisonGridName = obs + verticalComparisonGridName = uniform_10_to_1500m_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(-10, -1500, 150) + + # A range for the y axis (if any) + verticalBounds = [] + + # 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 + + # min and max latitude of transects + minLat = -80 + maxLat = -60 + + # longitudes of transects + # Default transects are at Filchner, Bellingshausen Sea, Thwaites, Ross, Totten, + # Amery, Fimbul + longitudes = [318., 280., 253., 187., 117., 75., 0.] + + # a list of fields top plot for each transect. All supported fields are listed + # below. + fieldList = ['temperature', 'salinity'] + + + [woaTemperatureTransects] + ## options related to plotting WOA23 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 + normTypeResult = linear + # A dictionary with keywords for the norm + normArgsResult = {'vmin': -2.0, 'vmax': 2.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, 0.25, 0.5, 0.75, 1, 2, 3, 4, 5, 6] + # place the ticks automatically by default + # colorbarTicksResult = numpy.linspace(0.0, 6.0, 9) + # contour line levels (use [] for automatic contour selection, 'none' for no + # contour lines) + #contourLevelsResult = np.arange(0.5, 6.0, 1.0) + contourLevelsResult = 'none' + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = continuous + # the type of norm used in the colormap + 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 (use [] for automatic contour selection, 'none' for no + # contour lines) + #contourLevelsDifference = np.arange(-1.8, 2.0, 0.4) + contourLevelsDifference = 'none' + + + [woaSalinityTransects] + ## options related to plotting WOA23 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 + normTypeResult = linear + # A dictionary with keywords for the norm + normArgsResult = {'vmin': 33.8, 'vmax': 35.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 = [34, 34.3, 34.5, 34.65, 34.675, 34.7, 34.725, 34.75, 34.8, 35] + # place the ticks automatically by default + # colorbarTicksResult = numpy.linspace(34.0, 35.0, 9) + # contour line levels (use [] for automatic contour selection, 'none' for no + # contour lines) + #contourLevelsResult = np.arange(34.1, 35.0, 0.1) + contourLevelsResult = 'none' + + # colormap for differences + colormapNameDifference = balance + # whether the colormap is indexed or continuous + colormapTypeDifference = continuous + # the type of norm used in the colormap + normTypeDifference = linear + # A dictionary with keywords for the norm + normArgsDifference = {'vmin': -0.5, 'vmax': 0.5} + # 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 = [-0.5, -0.2, -0.1, -0.05, -0.02, 0, 0.02, 0.05, 0.1, 0.2, 0.5] + # place the ticks automatically by default + # colorbarTicksDifference = numpy.linspace(-0.5, 0.5, 9) + # contour line levels (use [] for automatic contour selection, 'none' for no + # contour lines) + #contourLevelsDifference = numpy.linspace(-0.6, 0.6, 9) + contourLevelsDifference = 'none' + + +The options ``minLat`` and ``maxLat`` determine the start and end of each +meridional transect (in degrees). The option ``longitudes`` is a list or +numpy array of longitudes for each transect, e.g.:: + + longitudes = numpy.linspace(0, 330, 12) + +produces 12 transects spaced every 30 |deg|. + +The user can select only to plot a subset of the supported fields by adding +only the desired field names to ``fieldList``. Only potential temperature +and salinity are currently available. + +Ater the ``woaTransects`` section, there is a section for each supported field +specifying the information related to the colormap. + +For details on remaining configuration options, see: + * :ref:`config_transects` + * :ref:`config_remapping` + * :ref:`config_colormaps` + * :ref:`config_seasons` + +Observations +------------ + +:ref:`woa23_t_s` + +Example Result +-------------- + +.. image:: examples/woa23_transect.png + :width: 500 px + :align: center + +.. _`World Ocean Atlas 2023 (WOA23)`: https://www.ncei.noaa.gov/products/world-ocean-atlas diff --git a/mpas_analysis/__main__.py b/mpas_analysis/__main__.py index bc6f62120..a6c137795 100755 --- a/mpas_analysis/__main__.py +++ b/mpas_analysis/__main__.py @@ -228,6 +228,9 @@ def build_analysis_list(config, controlConfig): analyses.append(ocean.SoseTransects(config, oceanClimatologyTasks['avg'], controlConfig)) + analyses.append(ocean.WoaTransects(config, oceanClimatologyTasks['avg'], + controlConfig)) + analyses.append(ocean.GeojsonTransects(config, oceanClimatologyTasks['avg'], controlConfig)) diff --git a/mpas_analysis/default.cfg b/mpas_analysis/default.cfg index c21ca49b3..30803a2f6 100755 --- a/mpas_analysis/default.cfg +++ b/mpas_analysis/default.cfg @@ -203,7 +203,7 @@ tablesSubdirectory = tables generate = ['all_publicObs', 'no_icebergs', 'no_climatologyMapAntarcticMelt', 'no_timeSeriesAntarcticMelt', 'no_timeSeriesOceanRegions', 'no_climatologyMapSose', 'no_climatologyMapSchmidtko', - 'no_soseTransects', 'no_oceanRegionalProfiles'] + 'no_soseTransects', 'no_woaTransects', 'no_oceanRegionalProfiles'] [climatology] @@ -3514,6 +3514,141 @@ compareAsContoursOnSinglePlot = True contourLevelsResult = [1027.2, 1027.4, 1027.6, 1027.7, 1027.8, 1027.85, 1027.9, 1027.95, 1028.0] +[woaTransects] +## options related to plotting model vs. World Ocean Atlas 2023 (WOA23) +## transects. + +# Times for comparison times (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, +# Nov, Dec, JFM, AMJ, JAS, OND, ANN) +seasons = ['ANN', 'JFM', 'JAS'] + +# 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 + +# 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 = mpas +#verticalComparisonGridName = obs +verticalComparisonGridName = uniform_10_to_1500m_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(-10, -1500, 150) + +# A range for the y axis (if any) +verticalBounds = [] + +# 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 + +# min and max latitude of transects +minLat = -80 +maxLat = -60 + +# longitudes of transects +# Default transects are at Filchner, Bellingshausen Sea, Thwaites, Ross, Totten, +# Amery, Fimbul +longitudes = [318., 280., 253., 187., 117., 75., 0.] + +# a list of fields top plot for each transect. All supported fields are listed +# below. +fieldList = ['temperature', 'salinity'] + + +[woaTemperatureTransects] +## options related to plotting WOA23 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 +normTypeResult = linear +# A dictionary with keywords for the norm +normArgsResult = {'vmin': -2.0, 'vmax': 2.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, 0.25, 0.5, 0.75, 1, 2, 3, 4, 5, 6] +# place the ticks automatically by default +# colorbarTicksResult = numpy.linspace(0.0, 6.0, 9) +# contour line levels (use [] for automatic contour selection, 'none' for no +# contour lines) +#contourLevelsResult = np.arange(0.5, 6.0, 1.0) +contourLevelsResult = 'none' + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = continuous +# the type of norm used in the colormap +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 (use [] for automatic contour selection, 'none' for no +# contour lines) +#contourLevelsDifference = np.arange(-1.8, 2.0, 0.4) +contourLevelsDifference = 'none' + + +[woaSalinityTransects] +## options related to plotting WOA23 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 +normTypeResult = linear +# A dictionary with keywords for the norm +normArgsResult = {'vmin': 33.8, 'vmax': 35.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 = [34, 34.3, 34.5, 34.65, 34.675, 34.7, 34.725, 34.75, 34.8, 35] +# place the ticks automatically by default +# colorbarTicksResult = numpy.linspace(34.0, 35.0, 9) +# contour line levels (use [] for automatic contour selection, 'none' for no +# contour lines) +#contourLevelsResult = np.arange(34.1, 35.0, 0.1) +contourLevelsResult = 'none' + +# colormap for differences +colormapNameDifference = balance +# whether the colormap is indexed or continuous +colormapTypeDifference = continuous +# the type of norm used in the colormap +normTypeDifference = linear +# A dictionary with keywords for the norm +normArgsDifference = {'vmin': -0.5, 'vmax': 0.5} +# 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 = [-0.5, -0.2, -0.1, -0.05, -0.02, 0, 0.02, 0.05, 0.1, 0.2, 0.5] +# place the ticks automatically by default +# colorbarTicksDifference = numpy.linspace(-0.5, 0.5, 9) +# contour line levels (use [] for automatic contour selection, 'none' for no +# contour lines) +#contourLevelsDifference = numpy.linspace(-0.6, 0.6, 9) +contourLevelsDifference = 'none' + + [climatologyMapBGC] ## options related to plotting climatology mpas of BGC diff --git a/mpas_analysis/obs/observational_datasets.xml b/mpas_analysis/obs/observational_datasets.xml index b94b32620..7851749b4 100755 --- a/mpas_analysis/obs/observational_datasets.xml +++ b/mpas_analysis/obs/observational_datasets.xml @@ -1066,7 +1066,7 @@ journal={S., NOAA Atlas NESDIS}, volume={64} } - @article{garciaNutrients} + @article{garciaNutrients, title={Volume 4: dissolved inorganic nutrients (phosphate, nitrate, silicate), edited by: Levitus}, author={Garcia, HE and Locarnini, RA and Boyer, TP, and Atonov, JI}, journal={S., NOAA Atlas NESDIS}, diff --git a/mpas_analysis/ocean/__init__.py b/mpas_analysis/ocean/__init__.py index 0a3c88813..e232f868d 100644 --- a/mpas_analysis/ocean/__init__.py +++ b/mpas_analysis/ocean/__init__.py @@ -54,6 +54,7 @@ from mpas_analysis.ocean.woce_transects import WoceTransects from mpas_analysis.ocean.sose_transects import SoseTransects +from mpas_analysis.ocean.woa_transects import WoaTransects from mpas_analysis.ocean.geojson_transects import GeojsonTransects from mpas_analysis.ocean.ocean_regional_profiles import \ diff --git a/mpas_analysis/ocean/sose_transects.py b/mpas_analysis/ocean/sose_transects.py index 60ad514c9..3fb2e67a4 100644 --- a/mpas_analysis/ocean/sose_transects.py +++ b/mpas_analysis/ocean/sose_transects.py @@ -30,8 +30,8 @@ class SoseTransects(AnalysisTask): """ - Plot model output at WOCE transects and compare it against WOCE - observations + Plot model output at transects and various longitudes around Antarctica, + compared against SOSE """ # Authors @@ -287,7 +287,7 @@ def get_observations(self): def combine_observations(self): """ - Combine SOSE oservations into a single file + Combine SOSE observations into a single file """ # Authors # ------- diff --git a/mpas_analysis/ocean/woa_transects.py b/mpas_analysis/ocean/woa_transects.py new file mode 100644 index 000000000..83bd7a88f --- /dev/null +++ b/mpas_analysis/ocean/woa_transects.py @@ -0,0 +1,370 @@ +# This software is open source software available under the BSD-3 license. +# +# Copyright (c) 2022 Triad National Security, LLC. All rights reserved. +# Copyright (c) 2022 Lawrence Livermore National Security, LLC. All rights +# reserved. +# Copyright (c) 2022 UT-Battelle, LLC. All rights reserved. +# +# Additional copyright and license information can be found in the LICENSE file +# distributed with this code, or at +# https://raw.githubusercontent.com/MPAS-Dev/MPAS-Analysis/main/LICENSE +import os +from collections import OrderedDict + +import numpy as np +import xarray as xr + +from mpas_analysis.shared import AnalysisTask +from mpas_analysis.ocean.compute_transects_subtask import \ + TransectsObservations + +from mpas_analysis.ocean.compute_transects_with_vel_mag import \ + ComputeTransectsWithVelMag + +from mpas_analysis.ocean.plot_transect_subtask import PlotTransectSubtask + +from mpas_analysis.shared.io.utility import build_config_full_path, \ + make_directories, build_obs_path +from mpas_analysis.shared.io import write_netcdf_with_fill + + +class WoaTransects(AnalysisTask): + """ + Plot model output at transects and various longitudes around Antarctica, + compared against the WOA23 climatology + """ + + # Authors + # ------- + # Xylar Asay-Davis + + def __init__(self, config, mpasClimatologyTask, controlConfig=None): + """ + Construct the analysis task and adds it as a subtask of the + ``parentTask``. + + Parameters + ---------- + config : mpas_tools.config.MpasConfigParser + Configuration options + + mpasClimatologyTask : ``MpasClimatologyTask`` + The task that produced the climatology to be remapped and plotted + as a transect + + controlconfig : mpas_tools.config.MpasConfigParser, optional + Configuration options for a control run (if any) + """ + # Authors + # ------- + # Xylar Asay-Davis + + tags = ['climatology', 'transect', 'woa', 'publicObs', 'antarctic'] + + # call the constructor from the base class (AnalysisTask) + super().__init__( + config=config, taskName='woaTransects', + componentName='ocean', + tags=tags) + + sectionName = self.taskName + + seasons = config.getexpression(sectionName, 'seasons') + + horizontalResolution = config.get(sectionName, 'horizontalResolution') + + verticalComparisonGridName = config.get(sectionName, + 'verticalComparisonGridName') + + if verticalComparisonGridName in ['mpas', 'obs']: + verticalComparisonGrid = None + else: + verticalComparisonGrid = config.getexpression( + sectionName, 'verticalComparisonGrid', use_numpyfunc=True) + + verticalBounds = config.getexpression(sectionName, 'verticalBounds') + + longitudes = _get_longitudes(config) + + fields = \ + [{'prefix': 'temperature', + 'mpas': 'timeMonthly_avg_activeTracers_temperature', + 'units': r'$\degree$C', + 'titleName': 'Potential Temperature', + 'obsFilePrefix': 'pot_temp', + 'obsFieldName': 'pt_an'}, + {'prefix': 'salinity', + 'mpas': 'timeMonthly_avg_activeTracers_salinity', + 'units': r'PSU', + 'titleName': 'Salinity', + 'obsFilePrefix': 'salinity', + 'obsFieldName': 's_an'}] + + fieldList = config.getexpression(sectionName, 'fieldList') + fields = [field for field in fields if field['prefix'] in fieldList] + + variableList = [field['mpas'] for field in fields + if field['mpas'] != 'velMag'] + + transectCollectionName = 'WOA_transects' + if horizontalResolution not in ['obs', 'mpas']: + transectCollectionName = \ + f'{transectCollectionName}_{horizontalResolution}km' + + transectsObservations = WoaTransectsObservations( + config, horizontalResolution, + transectCollectionName, fields) + + computeTransectsSubtask = ComputeTransectsWithVelMag( + mpasClimatologyTask=mpasClimatologyTask, + parentTask=self, + climatologyName='WOA_transects', + transectCollectionName=transectCollectionName, + variableList=variableList, + seasons=seasons, + obsDatasets=transectsObservations, + verticalComparisonGridName=verticalComparisonGridName, + verticalComparisonGrid=verticalComparisonGrid) + + plotObs = controlConfig is None + if plotObs: + + refTitleLabel = 'Observations (WOA23 1991-2020)' + + diffTitleLabel = 'Model - State Estimate' + + else: + controlRunName = controlConfig.get('runs', 'mainRunName') + refTitleLabel = f'Control: {controlRunName}' + + diffTitleLabel = 'Main - Control' + + for field in fields: + fieldPrefix = field['prefix'] + fieldPrefixUpper = fieldPrefix[0].upper() + fieldPrefix[1:] + for lon in longitudes: + transectName = f'lon_{lon}' + + for season in seasons: + outFileLabel = f'WOA_{fieldPrefix}_' + if plotObs: + refFieldName = field['obsFieldName'] + else: + refFieldName = field['mpas'] + + fieldNameInTytle = \ + fr'{field["titleName"]} at {lon}$\degree$ Lon.' + # make a new subtask for this season and comparison grid + subtask = PlotTransectSubtask(self, season, transectName, + fieldPrefix, + computeTransectsSubtask, + plotObs, controlConfig) + + subtask.set_plot_info( + outFileLabel=outFileLabel, + fieldNameInTitle=fieldNameInTytle, + mpasFieldName=field['mpas'], + refFieldName=refFieldName, + refTitleLabel=refTitleLabel, + diffTitleLabel=diffTitleLabel, + unitsLabel=field['units'], + imageCaption=f'{fieldNameInTytle} {season}', + galleryGroup='WOA23 Transects', + groupSubtitle=None, + groupLink='woa_transects', + galleryName=field['titleName'], + configSectionName=f'woa{fieldPrefixUpper}Transects', + verticalBounds=verticalBounds) + + self.add_subtask(subtask) + + +class WoaTransectsObservations(TransectsObservations): + """ + A class for loading and manipulating WOA transect data + + Attributes + ---------- + + fields : list of dict + dictionaries defining the fields with associated WOA data + """ + + # Authors + # ------- + # Xylar Asay-Davis + + def __init__(self, config, horizontalResolution, + transectCollectionName, fields): + + """ + Construct the object, setting the observations dictionary to None. + + Parameters + ---------- + config : mpas_tools.config.MpasConfigParser + Configuration options + + horizontalResolution : str + 'obs' for the obs as they are or a size in km if subdivision is + desired. + + transectCollectionName : str + A name that describes the collection of transects (e.g. the name + of the collection of observations) used to name the + destination "mesh" for regridding + + fields : list of dict + dictionaries defining the fields with associated WOA data + """ + # Authors + # ------- + # Xylar Asay-Davis + + # this will be constructed later + obsFileNames = None + + # call the constructor from the base class (TransectsObservations) + super(WoaTransectsObservations, self).__init__( + config, obsFileNames, horizontalResolution, + transectCollectionName) + + self.fields = fields + + def get_observations(self): + """ + Read in and set up the observations. + + Returns + ------- + obsDatasets : OrderedDict + The observational dataset + """ + # Authors + # ------- + # Xylar Asay-Davis + + # first, extract the WOA transects at the requested lat range and lon + # values + if self.obsFileNames is None: + self.extract_observations() + + # then, call the method from the parent class + return super().get_observations() + + def extract_observations(self): + """ + Extract WOA23 observations over the range of lat and lon requested + """ + # Authors + # ------- + # Xylar Asay-Davis + + config = self.config + + longitudes = _get_longitudes(config) + + observationsDirectory = build_obs_path( + config, 'ocean', 'woa23Subdirectory') + + outObsDirectory = build_config_full_path( + config=config, section='output', + relativePathOption='climatologySubdirectory', + relativePathSection='oceanObservations') + + make_directories(outObsDirectory) + + transectsFileName = \ + f'{outObsDirectory}/{self.transectCollectionName}.nc' + obsFileNames = OrderedDict() + for lon in longitudes: + transectName = f'lon_{lon}' + obsFileNames[transectName] = transectsFileName + + self.obsFileNames = obsFileNames + + if os.path.exists(transectsFileName): + return + + print('Preprocessing WOA transect data...') + + minLat = config.getfloat('woaTransects', 'minLat') + maxLat = config.getfloat('woaTransects', 'maxLat') + + fileName = f'{observationsDirectory}/' \ + f'woa23_decav_04_pt_s_mon_ann.20241101.nc' + + dsObs = xr.open_dataset(fileName) + + lat = dsObs.lat.values + mask = np.logical_and(lat >= minLat, lat <= maxLat) + indices = np.argwhere(mask) + dsObs = dsObs.isel(lat=slice(indices[0][0], + indices[-1][0])) + + dsObs = dsObs.sel(lon=longitudes, method=str('nearest')) + + dsObs = dsObs.rename({'depth': 'z'}) + attrs = dsObs.z.attrs + dsObs['z'] = -dsObs.z + dsObs['z'].attrs = attrs + dsObs['z'].attrs['positive'] = 'up' + + write_netcdf_with_fill(dsObs, transectsFileName) + + print(' Done.') + + def build_observational_dataset(self, fileName, transectName): + """ + read in the data sets for observations, and possibly rename some + variables and dimensions + + Parameters + ---------- + fileName : str + observation file name + + transectName : str + transect name + + Returns + ------- + dsObs : xarray.Dataset + The observational dataset + """ + # Authors + # ------- + # Xylar Asay-Davis + + dsObs = xr.open_dataset(fileName) + + lon = float(transectName.rsplit('_', 1)[-1]) + + dsObs = dsObs.sel(method='nearest', lon=lon) + lon = dsObs.lon.values + + # must have capital Time + dsObs = dsObs.rename({'time': 'Time'}) + # make sure month is a coord + dsObs = dsObs.set_coords('month') + # add a dummy year to the dataset + dsObs.coords['year'] = ('Time', np.ones(dsObs.sizes['Time'], int)) + + # do some dropping and renaming so we end up with the right coordinates + # and dimensions for transects + dsObs = dsObs.rename({'lat': 'nPoints', 'z': 'nz'}) + dsObs['lat'] = dsObs.nPoints + dsObs['z'] = dsObs.nz + dsObs['lon'] = ('nPoints', lon * np.ones(dsObs.sizes['nPoints'])) + dsObs = dsObs.drop_vars(['nPoints', 'nz']) + + return dsObs + + +def _get_longitudes(config): + longitudes = config.getexpression('woaTransects', 'longitudes', + use_numpyfunc=True) + longitudes = np.array(longitudes) + # make sure longitudes are between -180 and 180 + longitudes = np.sort(np.mod(longitudes + 180., 360.) - 180.) + return longitudes diff --git a/mpas_analysis/polar_regions.cfg b/mpas_analysis/polar_regions.cfg index ce81fcb1e..fc5ff5198 100644 --- a/mpas_analysis/polar_regions.cfg +++ b/mpas_analysis/polar_regions.cfg @@ -166,6 +166,82 @@ colorbarLevelsDifference = [-0.5, -0.2, -0.1, -0.05, -0.02, 0, 0.02, 0.05, 0.1, 0.2, 0.5] +[woaTransects] +## options related to plotting model vs. World Ocean Atlas 2023 (WOA23) +## transects. + +# longitudes of transects +# Western Weddell 1, Filchner (318=42W), Western Weddell 2 (325=35W), +# West Maud Rise, Fimbul (0), Amery (75E), Totten (117E), +# George V coast, Merzt (145E), Wilkes (160E), Western Ross (184=176W), +# Center Ross (187=173W), Eastern Ross (198=162W), +# Amudsen, Thwaites (253=107W), Bellingshausen (280=80W), +# West Antarctica (288=72W) +# Note: Transects at 325, 145, 160, 184, 198 and 288 are chosen for comparison with +# Whitworth et al. (1998) doi: 10.1029/AR075p0001, Figs. 3, 7, 6, 5, 4, 10, respectively. +longitudes = [318., 325., 0., 75., 117., 145., 160., 184., 187., 198., 253., + 280., 288.] + +# 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 + +# 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 = mpas + +# A range for the y axis (if any) +verticalBounds = [-1500., 0.] + +# a list of fields top plot for each transect. +fieldList = ['temperature', 'salinity'] + + +[woaTemperatureTransects] +## options related to plotting WOA23 transects of potential temperature + +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [0, 14, 28, 57, 85, 113, 125, 142, 170, 180, 198, 227, + 240, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [-1.6, -1.2, -0.4, 0.0, 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, + 3.0, 4.0, 6.0] + +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# 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] + +[woaSalinityTransects] +## options related to plotting WOA23 transects of salinity + +# whether the colormap is indexed or continuous +colormapTypeResult = indexed +# color indices into colormapName for filled contours +colormapIndicesResult = [0, 20, 40, 80, 120, 140, 160, 180, 200, 220, 240, 255] +# colormap levels/values for contour boundaries +colorbarLevelsResult = [34.1, 34.2, 34.3, 34.4, 34.5, 34.55, 34.6, 34.65, + 34.68, 34.7, 35.0] + +# whether the colormap is indexed or continuous +colormapTypeDifference = indexed +# 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 = [-0.5, -0.2, -0.1, -0.05, -0.02, 0, 0.02, 0.05, + 0.1, 0.2, 0.5] + + [woceTransects] ## options related to plotting model vs. World Ocean Circulation Experiment ## (WOCE) transects.