RADWave - Wave analysis from Altimeter data

Documentation Status

Satellite radar altimeters can be used to determine significant wave height and wind speed [Young2011]. Since the first launch of the GEOSAT (GEOdetic SATellite) altimeter in 1985, there has been almost continuous data collection. From these measurements one can calculate wave conditions namely wave height, period and power [Young2018]. Analysis of this long-term, high resolution spatio-temporal record brings new insights into inter-annual, seasonal and decadal variations of regional wave climates.

Altimeter analysis

RADWave is Python package that provides a mechanism to access altimeter datasets through web-enabled data services (THREDDS) using the Australian Ocean Data Network [AODN] database. This dataset spans from 1985-present and has already been calibrated and validated by [Ribal2019]. RADWave allows the user to query over a range of spatial and temporal scales altimeter parameters in specific geographical regions and subsequently calculates significant wave heights, periods, group velocities, average wave energy densities and wave energy fluxes.

Hint

RADWave can be used to easily calculate past wave conditions and infers long term wave climate variability, providing new insights on wave modal conditions, seasonal changes, long-term trends and associated modulation by climate oscillations.

Note

Designed for researchers and industry partners focusing on offshore wave conditions globally, RADWave enhances the ease of access and analysis of altimeter data.

Contents

Wave parameters

This page outlines the techniques and methods used to acquire and analyse data from radar satellite altimeters and how RADWave package uses this dataset to investigate wave parameters, enabling wave climate analysis of varying spatial and temporal resolution.

LEC versus diversity

Important

RADWave uses post-processed altimeter dataset to analyse historical wave climate and trends but can also be used to determine cyclone-generated wave conditions.

Satellite altimeter data

Altimeter observations of the ocean surface are been recorded since 1985, with a short break between 1989-1991 due to no operating satellites [Chelton2001] (fig. below from source). Thirteen altimeters, named GEOSAT, ERS-1, TOPEX, ERS-2, GFO, JASON-1, ENVISAT, JASON-2, HAI-YANG-2A, SARAL, JASON-3 and SENTINEL-3A, provides detailed and global coverage.

Note

Satellites were predominantly placed in sun-synchronous, near-polar orbits, covering the same ground track every 3-10 days. Observations are therefore not made every day, however, observation frequency has increased in recent years due to the addition of more altimeters.

Altimeter data

To increase analysis ability between altimeter missions, [Ribal2019] combined and reprocessed data from Globwave, Radar Altimeter Data System and the National Satellite Ocean Application Service to provide a single dataset spanning all thirteen altimeter missions from 1985-2019.

Altimeters measure the ocean surface by emitting a radar pulse and determining the shape, power and time delay of the return pulse. The shape is converted into \(H_{s}\). The power of the return pulse, also known as the backscatter coefficient, is used to determine ocean surface properties including surface roughness. By applying a relationship between uncalibrated wind speed and backscatter coefficient, a calibrated wind speed \(U_{10}\) (10 m above the sea surface and averaged over 10 minutes) can be determined.

Important

Overall, [Ribal2019] suggests that preprocessed and calibrated dataset is valid for wind speed below 24 m/s and Hs below 9 m, however, notes that values above this limit are likely still valid.

Wave periods

However, altimeters do not directly measure wave period, an essential component to adequately characterise wave climate.

For waves that have been locally generated by wind, the local wind speed and wave height, both of which are accurately measured by altimeters, can be used to determine \(T_{z}\) [Quilfen2004]. More accurate results are achieved when the wave age is calculated first, which is the length of time wind has been acting on a wave [Remya2010]. In RADWave, an algorithm derived by [Remya2010] is implemented. It estimates \(T_{z}\) in both wind and swell-generated seas (rmse = 0.76 s).

First, the wave age is calculated through:

\[\epsilon = 3.25 \frac{H_{s} g}{U_{10}}\]

where \(H_{s}\) is the significant wave height, \(g\) the acceleration by gravity and \(U_{10}\) the wind speed.

Wave age \(\epsilon\) is then inputted into a Genetic Algorithm [Remya2010] to estimate \(T_{z}\):

\[T_{z} = (((\epsilon - 5.78)/(\epsilon + (U_{10}/H_{s} \times (U_{10}/H_{s}) + H_{s}))))) +(H_{s} + 5.70))\]

Wave energy, group velocity & power

Wave data

Mean wave energy density (\(E\)) (J/m2) is calculated by:

\[E = \frac{1}{8} \rho g H_{s}^{2}\]

with \(\rho\) the density of seawater (set to 1027 kg/m3).

Wave group velocity (\(C_{g}\)) in deep water conditions is approximated with:

\[C_{g} = \frac{g T_{z}}{2 \pi}\]

And wave power \(P\) can, therefore, be estimated through:

\[P = E C_{g}\]

which is the wave energy flux per metre of wave-crest (W/m). This is then converted into kW/m for ease of analysis.

[Chelton2001]Chelton, D.B., Ries, J.C., Haines, B.J., Fu, L.L. & Callahan, P.S. - Satellite Altimetry, Satellite altimetry and Earth sciences in L.L. Fu and A. Cazenave Ed., Academic Press, 2001.
[Quilfen2004]Quilfen, Y., Chapron, B., Collard, F. & Serre, M. - Calibration/validation of an altimeter wave period model and application to Topex/Poseidon and Jason-1 altimeters, Marine Geodesy, 27(3-4), 535–549, 2004.
[Ribal2019](1, 2) Ribal, A. & Young, I. R. - 33 years of globally calibrated wave height and wind speed data based on altimeter observations. Scientific Data 6(77), p.100, 2019.
[Remya2010](1, 2, 3) Remya G., Kumar, R., Basu, S. & Sarkar, A. - Altimeter-derived ocean wave period using genetic algorithm. IEEE Geoscience and Remote Sensing Letters, 8(2), 354–358, 2010.

Installation

RADWave is a pure Python package and can be installed via pip as well as Docker.

Dependencies

You will need a working Python 3+ (though it will work with Python 2.7) and the following packages are required: numpy, scipy, pandas, scikit-image, seaborn, geopy, cartopy, netCDF4, shapely, pymannkendall.

The complete list of Dependencies is available in the requirements.txt file and looks like:

numpy>=1.15.0
pytest
six>=1.11.0
setuptools>=38.4.0
pandas>=0.25
seaborn>=0.9
matplotlib>=3.0
geopy>=1.20
cartopy>=0.17
scipy>=1.3
netCDF4>=1.5.1
shapely>=1.6.4
scikit-image>=0.15
pymannkendall>=0

Installing using pip

PyPI version shields.io

You can install RADWave package using the latest stable release available via pip!

pip install RADWave

If you need to install it for different python versions:

$ python2 -m pip install radwave
$ python3 -m pip install radwave

To install the development version: Clone the repository using

git clone https://github.com/pyReef-model/RADWave.git

Navigate into the RADWave directory and run

$ pip install -r requirements.txt
$ pip install .

Installing using Docker

Another straightforward installation which does not depend on specific compilers relies on docker virtualisation system.

To install the docker image and test it is working:

$ docker pull pyreefmodel/radwave:latest
$ docker run --rm pyreefmodel/radwave:latest help

On Linux, to build the dockerfile locally, we provide a script. First ensure you have checked out the source code from github and then run the script in the Docker directory. If you modify the dockerfile and want to push the image to make it publicly available, it will need to be retagged to upload somewhere other than the pyReef-model repository.

$ git checkout https://github.com/pyReef-model/RADWave.git
$ cd RADWave
$ source Docker/build-dockerfile.sh

Note

For non-Linux platforms, the use of Docker Desktop for Mac or Docker Desktop for Windows is recommended. The docker container to look for is named pyreefmodel/radwave!

Quick start guide

I/O Options

The most simple code lines to use RADWave functions is summarised below

import RADWave as rwave

wa = rwave.waveAnalysis(altimeterURL='../dataset/IMOSURLs.txt', bbox=[152.0,155.0,-36.0,-34.0],
                stime=[1985,1,1], etime=[2018,12,31])
wa.processAltimeterData(altimeter_pick='all', saveCSV = 'altimeterData.csv')
wa.visualiseData(title="Altimeter data tracks", extent=[149.,158.,-38.,-32.],
               addcity=['Sydney', 151.2093, -33.8688], markersize=40, zoom=8,
               fsize=(8, 7), fsave='altimeterdata')
timeseries = wa.generateTimeSeries()
wa.plotTimeSeries(time=[1995,2016], series='H', fsize=(12, 5), fsave='seriesH')
wh_all = wa.computeSeasonalCharacteristics(series='wh', time=[1998,2018], lonlat=None, fsave='whall', plot=True)
Getting altimeter values from data providers

As previously mentioned, RADWave capabilities are illustrated using the Australian Ocean Data Network portal [AODN]. The altimeter dataset are available from the portal by searching for the following data collection:

  • IMOS-SRS Surface Waves Sub-Facility - altimeter wave/wind data

This global dataset has been compiled and extensively calibrated by [Ribal2019] and was regularly updated using altimeter data from 1985 to present. It can be downloaded in 1° x 1° URL files.

Note

The video below illustrates how to select both a spatial bounding box and a temporal extent from the portal and how to export the file containing the List of URLs used for wave analysis. This TXT file contains a list of NETCDF files for each available satellites.

Important

RADWave uses the file containing the list of URLs to query via THREDDS the remote data. This operation can take several minutes and when looking at a large region it is recommended to divide the analyse in smaller regions and download a series of URLs text file instead of the entire domain directly.

A series of URLs text files is provided with the notebook examples.

Loading altimeter parameters

Once the list of NETCDF data file has been saved on disk, you will be able to load it by initialising RADWave main Python class called waveAnalysis. For a detail overview of the options available in this class, the user is invited to look at the waveAnalysis API.

import RADWave as rwave

wa = rwave.waveAnalysis(altimeterURL='../dataset/IMOSURLs.txt', bbox=[152.0,155.0,-36.0,-34.0],
                        stime=[1985,1,1], etime=[2018,12,31])

Note

In cases where one want to query altimeter data along a specific path such as a cyclone track, it will be necessary to provide a second file with the recorded track geographical coordinates and associated time. The file will be a CSV file with in the header the following keyword names lon, lat & datetime. An example of such a file is provided with the notebooks based on dataset exported from the Bureau of Meteorology (BOM). In such cases, the call to waveAnalysis will take the form:

import RADWave as rwave

wa = rwave.waveAnalysis(altimeterURL='../dataset/IMOS_YASI_east.txt', bbox=[170, 175, -17, -12],
                          stime=[2011,1,27], etime=[2011,2,4], cycloneCSV='../dataset/2010-YASI.csv')

After class initialisation querying the actual dataset is realised by calling the processAltimeterData function (option available in the processAltimeterData API)

wa.processAltimeterData(altimeter_pick='all', saveCSV = 'altimeterData.csv')

The function can take some times to execute depending on the number of NETCDF files to load and the size of the dataset to query.

Note

This function relies mostly on Pandas (library) and writes the processed dataset to file that can be later used to access more efficiently altimeter information.

In case where the processAltimeterData function has already been executed, one can load directly the processed data from the created CSV file in a more efficient way by running the readAltimeterData function as follow:

wa.readAltimeterData(saveCSV = 'altimeterData.csv')
Computing wave regime

To perform wave analysis and compute the wave parameters discussed in the documentation, two additional functions are available:

  • generateTimeSeries see the generateTimeSeries API for the available options. This function computes time series of wave characteristics from significant wave height \(H_{s}\) and wind speed \(U_{10}\). It computes the both instantaneous and monthly wave variables. The class waveAnalysis stores a Pandas dataframe (called timeseries) of computed wave parameters that can be subsequently used for further analysis. The following wave parameters can be plotted with this function: H for wave height, T for wave period, P for wave power, E for wave energy, and Cg for wave group velocity.
  • close2Track see the close2Track API for the available options. This function can be used when analysing cyclone tracks and finds the closest processed altimeter geographical locations that have been recorded in the database based on a KDTree search. As for the previous function, this one stores a Pandas dataframe (called cyclone_data) of closest wave data that can be subsequently used for further analysis.
timeseries = wa.generateTimeSeries()
track = wa.close2Track(radius=2.,dtmax=6.)
Outputs

We provide several default plotting functionalities within RADWave package.

Note

Plotting functions rely on Cartopy, Seaborn, Pandas and Matplotlib libraries.

In most of these functions it is possible to export the figures as PNG files and for better rendering we recommend in Jupyter Notebooks to add the following matplotlib commands in your code cell:

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

These functions are quickly presented below:

plotting functions 1
wa.plotCycloneTracks(title="Cyclone YASI Track", markersize=100, zoom=4,
                   extent=[138, 180, -30, -10], fsize=(12, 10))

wa.visualiseData(title="Altimeter data", extent=[138, 180, -30, -10.0],
                markersize=35, zoom=4, fsize=(12, 10), fsave=None)
plotting functions 2
wa.plotTimeSeries(time=[1995,2016], series='H', fsize=(12, 5), fsave='seriesH')
whdata = wa.computeSeasonalCharacteristics(series='wh', time=[1998,2018], lonlat=None, fsave='whall', plot=True)
plotting function 3
wa.plotCycloneAltiPoint(showinfo=True, extent=[138, 180, -18, -10],
                markersize=35, zoom=4, fsize=(12, 5))

Running examples

There are different ways of using the RADWave package. If you used a local install with pip, you can download the Jupyter Notebooks provided in the Github repository…

$ git clone https://github.com/pyReef-model/RADWave.git
Binder

The series of Jupyter Notebooks can also be ran with Binder that opens those notebooks in an executable environment, making the package immediately reproducible without having to perform any installation.

https://mybinder.org/badge_logo.svg

This is by far the most simple method to test and try this package, just launch the demonstration at RADWave-live (mybinder.org)!

binder
Docker

Another straightforward installation that again does not depend on specific compilers relies on the docker virtualisation system. Simply look for the following Docker container pyreefmodel/radwave.

Note

For non-Linux platforms, the use of Docker Desktop for Mac or Docker Desktop for Windows is recommended.

[Ribal2019]Ribal, A. & Young, I. R. - 33 years of globally calibrated wave height and wind speed data based on altimeter observations. Scientific Data 6(77), p.100, 2019.

Collaborations

How to contribute

We welcome all kinds of contributions! Please get in touch if you would like to help out.

Important

Everything from code to notebooks to examples and documentation are all equally valuable so please don’t feel you can’t contribute.

To contribute please fork the project make your changes and submit a pull request. We will do our best to work through any issues with you and get your code merged into the main branch.

If you found a bug, have questions, or are just having trouble with RADWave, you can:

Where to find support

Please feel free to submit new issues to the issue-log to request new features, document new bugs, or ask questions.

License

GPLv3 license

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See also

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see http://www.gnu.org/licenses/lgpl-3.0.en.html.

API documentation

This section of the documentation details the auto-generated API from Read the Docs.

class RADWave.altiwave.waveAnalysis(cycloneCSV=None, altimeterURL=None, bbox=None, stime=None, etime=None, satNames=None)[source]

Bases: object

RadWave is a package to perform wave analysis using AODN Radar Altimeter Data. Radar altimeters are mounted on satellites and measure a footprint of the ocean directly under the satellite (approx. 5-7 km wide). When the water surface is calm and flat, the reflection of the radar pulse back to the altimeter is almost instantaneous. In contrast, when waves are present the pulse is first reflected at the crest of the wave, then progressively reflected as the pulse reaches the wave trough.

Method:
Calibrated altimeter dataset provide wave height and wind speed through a series of equations described in [RibalYoung2019]
[RibalYoung2019]Ribal, A. & Young, I. R. - 33 Years of Globally Calibrated Wave Height and Wind Speed Data Based on Altimeter Observations. Sci Data 6, 77, DOI: 10.1038/s41597-019-0083-9, 2019.
Data:
Altimeter data are read from netcdf files that are provided via a list of URLs. Here we propose a series of examples using the Australian Ocean Data Network (AODN) (https://portal.aodn.org.auIMOS) but other web portals could be easely added.
Parameters:
  • cycloneCSV (str) – path as a csv file containing cyclone tracks with in the header the following names lon, lat & datetime [default: None]
  • altimeterURL (str) – list of NetCDF URLs downloaded from the wave data portal containing the radar altimeter data [default: None]
  • bbox (list) – bounding box specifying the geographical extent of the uploaded dataset following the convention [lon min,lon max,lat min,lat max] [default: None]
  • stime (list) – starting time of wave climate analysis following the convention [year, month, day] [default: None]
  • etime (list) – ending time of wave climate analysis following the convention [year, month, day] [default: None]
  • satNames (list) – list of satellites to use for the analysis - AODN portal provide the record from 10 satellites for altimeter data [default: None]

Note

This remote sensing technique does not provide individual wave statistics, but rather returns the average value over satellite footprint, up to 7 km wide.

close2Track(radius=2.0, dtmax=6)[source]

From all cyclone tracks, this function finds the closest processed altimeter geographical locations that have been recorded in the database. In addition to their coordinates, the altimeter dataset has to be recorded during a user defined time lapse close enough to the cyclone path time at each position.

The recorded dataframe cyclone_data contains the following variables:

  • altimeter significant wave height (m) ‘wH’
  • altimeter wave period (s) ‘period’
  • altimeter wave energy flux (kW/m) ‘power’
  • altimeter wave average energy density (J/m2) ‘energy’
  • altimeter wave group velocity (m/s) ‘speed’
  • distance between altimeter coordinates and cyclone path (km) ‘dist’
  • cyclone date (datetime) ‘cdate’
  • difference in time between recorded cyclone date and altimeter data for specific position (hours) ‘hours’
  • cyclone latitude position ‘clat’
  • cyclone longitude position ‘clon’
  • altimeter data latitude position ‘lat’
  • altimeter data longitude position ‘lon’
Parameters:
  • radius (float) – maximum radius distance in degree between cyclone position and altimeter data coordinates [default: ‘2.’]
  • dtmax (float) – maximum difference in time between recorded cyclone date and picked altimeter data (hours) [default: ‘6.’]

Note

The class waveAnalysis() saves a pandas dataframe called cyclone_data that stores the closest points to each cyclone path coordinates for further analysis.

Returns:pandas dataframe containing cyclone track information
Return type:cycdata (dataframe)
computeSeasonalCharacteristics(series='wh', time=None, lonlat=None, fsave=None, plot=True)[source]

This function allows the user to analyse the seasonal characteristics of each parameter obtained from the altimeter dataset. For a specified time interval and geographical extent, it computes for a given wave variable the monthly seasonality. Obtained monthly averaged values are stored and returned with a Pandas dataframe. User has the option to plot the computed wave paraneter characteristics as a heatmap, a box plot and a standard deviation graph.

For the wave height series, a Seasonal Mann-Kendall test is also performed to determine monotonic trends in computed dataset using the package from Hussain & Mahmud (2019).

Hussain & Mahmud, 2019: pyMannKendall: a python package for non parametric Mann Kendall family of trend tests - JOSS, 4(39), 1556.

Note

This function uses the seaborn and matplotlib libraries to plot the heatmap and the seasonal boxplot.

Parameters:
  • series (str) – name of the series to plot based on timeseries dataframe, choices are: ‘wh’, ‘period’, ‘power’, ‘energy’ and ‘speed’ [default: ‘wh’]
  • time (list) – extent of years to plot for plotting time series from 1995 to 2010 user will set ‘time’ to [1995,2010] [default: None]
  • lonlat (list) – specifying the geographical extent of the season characteristics computation following the convention [lon min,lon max,lat min,lat max] [default: None]
  • fsave (str) – saved image name without extension that will be written as a PNG file [default: None]
  • plot (bool) – flag specifying if plots have to been done [plot: True]
Returns:

pandas dataframe containing for chosen series variable the seasonality parameter for specified time interval

Return type:

dfseason (dataframe)

generateTimeSeries(days=30)[source]

Time series of wave characteristics are obtained via both the significant wave height and wind speed parameters from the altimeter dataset.

Time series compute the following instantaneous and monthly variables:

  • significant wave height (m) ‘wh’ & ‘wh_rolling’
  • wave period (s) ‘period’ & ‘period_rolling’
  • wave energy flux (kW/m) ‘power’ & ‘power_rolling’
  • wave average energy density (J/m2) ‘energy’ & ‘energy_rolling’
  • wave group velocity (m/s) ‘speed’ & ‘speed_rolling’
Parameters:days (int) – moving average window for time series calculation [default: ‘30’]

Note

The class waveAnalysis() saves a pandas dataframe called timeseries that stores the wave time series for further analysis.

Returns:pandas dataframe containing time series of wave characteristics
Return type:timeseries (dataframe)
meanEnergy(H, grav=9.80665, seadensity=1025.0)[source]

In a sea state, the average(mean) energy density per unit area of gravity waves on the water surface is proportional to the wave height squared, according to linear wave theory [Goda 2000].

Method:

Goda Y., 2000: Random Seas and Design of Maritime Structures - World Scientific, ISBN 978-981-02-3256-6.

Holthuijsen L.H., 2007: Waves in oceanic and coastal waters - Cambridge: Cambridge University Press, ISBN 978-0-521-86028-4.

Parameters:
  • H (numpy array) – significant wave height in metres
  • grav (float) – acceleration of gravity (m/s2) [default: 9.80665]
  • seadensity (float) – sea density (kg/m3) [default: 1025.]
Returns:

average(mean) energy density per unit area of gravity waves (J/m2)

Return type:

E (numpy array)

plotCycloneAltiPoint(showinfo=False, extent=None, addcity=None, markersize=100, zoom=4, fsize=(12, 10))[source]

This function plots a series of figures of the geographical coordinates for processed altimeter data close to each cyclone path position.

Parameters:
  • showinfo (bool) – show considered cyclone path coordiantes and associated recorded time and associate wave parameters [default: False]
  • extent (int) – geographical extent of the figure following the convention [lon min,lon max,lat min,lat max] [default: None]
  • addcity (list) – defined a specific location using the following convention [‘City Name’, longitude, latitude] [default: None]
  • markersize (int) – size of the markers used to specify cyclone tracks [default: 100]
  • zoom (int) – given target zoom for the target domain background (must be a value >= 1) [default: 4]
  • fsize – size of the image [default: (12,10)]

Note

This function relies on cartopy and matplotlib libraries. We use cartopy’s ability to draw map tiles which are downloaded on demand from the Stamen tile server.

plotCycloneTracks(title='Cyclone data tracks', markersize=100, zoom=4, extent=None, fsize=(12, 10), fsave=None)[source]

This function plots and saves in a figure a specific cyclone track loaded during the initialisation phase of the waveAnalysis class.

Example of cyclone track for Australia can be found on the Australian Bureau of Meteorology (BOM).

Parameters:
  • title (str) – title for the figure [default: “Cyclone data tracks”]
  • markersize (int) – size of the markers used to specify cyclone tracks [default: 100]
  • zoom (int) – given target zoom for the target domain background (must be a value >= 1) [default: 4]
  • extent (int) – geographical extent of the figure following the convention [lon min,lon max,lat min,lat max] [default: None]
  • fsize – size of the image [default: (12,10)]
  • fsave (str) – saved image name without extension that will be written as a PNG file [default: None]

Note

This function relies on cartopy and matplotlib libraries. We use cartopy’s ability to draw map tiles which are downloaded on demand from the Stamen tile server.

Warning

The cyclone tracks contains the following variables lon, lat & datetime.

plotTimeSeries(time='all', series='H', fsize=(12, 5), fsave=None)[source]

This function plots and saves in a figure a time series for a specific parameter from the processed altimeter data.

The choices of time series to plot are:

  • ‘H’: for wave height,
  • ‘T’: for wave period,
  • ‘P’: for wave power,
  • ‘E’: for wave energy, and
  • ‘Cg’: for wave group velocity

It also provides the following information:

  • Maximum parameter value
  • Mean parameter value
  • Median parameter value
  • 95th percentile parameter value
Parameters:
  • time (list) – extent of years to plot for plotting time series from 1995 to 2010 user will set ‘time’ to [1995,2010], to plot the entire record use the keyword ‘all’ [default: ‘all’]
  • series (str) – name of the series to plot choices are: ‘H’, ‘T’, ‘P’, ‘E’ and ‘Cg’ [default: ‘H’]
  • fsize – size of the image [default: (12,5)]
  • fsave (str) – saved image name without extension that will be written as a PNG file [default: None]
processAltimeterData(altimeter_pick='all', saveCSV='altimeterData.csv')[source]

From the list of OPeNDAP data URL’s this function extracts the altimeter data information.

The function can take some times to execute depending on the number of files to load and the size of the dataset to query.

Note

This function relies mostly on Pandas (library) and writes the processed dataset to file that can be later used to access more efficiently altimeter information.

Warning

Because the data is accessed via the THREDDS catalog, there can be a latency when querying the NetCDF files.

Parameters:
  • altimeter_pick (list) – list of satellites to use for the analysis as an example AODN portal provide the record from 10 satellites for altimeter data [default: ‘all’]
  • saveCSV (str) – filename used to save processed altimeter data obtained from the OPeNDAP web service [default: ‘altimeterData.csv’]
readAltimeterData(saveCSV=None)[source]

In case where the processAltimeterData function has already been executed, one can load directly the processed data from the created CSV file.

Parameters:saveCSV (str) – filename used to save processed altimeter data obtained from the OPeNDAP web service [default: None]
visualiseData(title='Altimeter data coordinates', extent=None, addcity=None, markersize=100, zoom=4, fsize=(12, 10), fsave=None)[source]

This function plots and saves in a figure the geographical coordinates of processed altimeter data. In case where a cyclone track has also been loaded during the initialisation phase of the waveAnalysis class, the cyclone path is also added to the figure.

Parameters:
  • title (str) – title for the figure [default: “Altimeter data coordinates”]
  • extent (int) – geographical extent of the figure following the convention [lon min,lon max,lat min,lat max] [default: None]
  • addcity (list) – defined a specific location using the following convention [‘City Name’, longitude, latitude] [default: None]
  • markersize (int) – size of the markers used to specify cyclone tracks [default: 100]
  • zoom (int) – given target zoom for the target domain background (must be a value >= 1) [default: 4]
  • fsize – size of the image [default: (12,10)]
  • fsave (str) – saved image name without extension that will be written as a PNG file [default: None]

Note

This function relies on cartopy and matplotlib libraries. We use cartopy’s ability to draw map tiles which are downloaded on demand from the Stamen tile server.

waveEnergyFlux(H, T, grav=9.80665, seadensity=1025.0)[source]

The rate at which energy is carried by waves is determined using total wave energy and wave energy speed (kW/m)

Parameters:
  • H (numpy array) – significant wave height in metres
  • T (numpy array) – wave period in seconds
  • grav (float) – acceleration of gravity (m/s2) [default: 9.80665]
  • seadensity (float) – sea density (kg/m3) [default: 1025.]
Returns:

wave energy flux (kW/m)

Return type:

P (numpy array)

waveGroupVelocity(T, grav=9.80665)[source]

As the waves propagate, their energy is transported and the energy transport velocity is the group velocity. From Airy wave theory, the group velocity (cg) is calculated in (m/s).

Parameters:
  • T (numpy array) – wave period in seconds
  • grav (float) – acceleration of gravity (m/s2) [default: 9.80665]
Returns:

group velocity (m/s)

Return type:

cg (numpy array)

wavePeriod(H, U, grav=9.80665)[source]

This function computes the wave period from the following altimeter data: wave height and surface wind speed.

Method:

Altimeters do not directly measure wave period, an essential component to adequately characterise wave climate. To calculate wave period from altimeter backscatter we use the algorithm proposed by Remya et al. (2010) based on wind speed (U) and significant wave height (H). This method has a high accuracy of estimating wave period (T) in both wind and swell-generated seas (root mean square error = 0.76 s).

Remya et al., 2010: Altimeter-derived ocean wave period using genetic algorithm - IEEE Geoscience and Remote Sensing Letters 8(2), 354–358.

Parameters:
  • H (numpy array) – significant wave height in metres
  • U (numpy array) – surface wind speed in metres per second
  • grav (float) – acceleration of gravity (m/s2) [default: 9.80665]
Returns:

wave period following Remya et al. (2010) algorithm (second)

Return type:

period (numpy array)

Indices and tables

[Ribal2019]Ribal, A. & Young, I. R. - 33 years of globally calibrated wave height and wind speed data based on altimeter observations. Scientific Data 6(77), p.100, 2019.
[Young2011]Young, I. R., Zieger, S. & Babanin, A. V. - Global trends in wind speed and wave height. Science 332(6028), p451–455, 2011.
[Young2018]Young, I. R. & Donelan, M. - On the determination of global ocean wind and wave climate from satellite observations. Remote Sensing of Environment 215, 228–241, 2018.