Geophysical Model Functions (GMFs)
This section is about the Geophysical Model Functions (GMFs) used for the data processing.
Doppler
The Doppler section concerns all the elements directly related to the surface motion as sensed by radar Doppler measurements. It concerns both the total surface current component and the Wave Doppler (WD) component. In this package the Wave Doppler is refered as Wind-wave Artefact Surface Velocity (WASV). Two GMFs to compute the WASV are available in this package: mouche12 and yurovsky19.
All these methods are described below:
Module to compute Doppler shift variables from airborne SAR imagery.
- seastar.gmfs.doppler.compute_radial_current(current_vel, rel_current_dir, inci)
Compute Radial and Radial Surface Current from known Current and acquisition geometry.
Input parameters u10, phi and inc must be in identical sizes and formats.
- Parameters:
current_vel (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Current Velocity (m/s)rel_current_dir (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Angle between current and look directions (degrees)inci (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Incidence angle of radar beam (degrees from nadir).
- Returns:
u_rsc (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Radial Surface Current (m/s)u_r (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Radial Current (m/s) in the slant direction directly towards the radar.
- seastar.gmfs.doppler.compute_total_surface_motion(L1, aux_geo, gmf, **kwargs)
Compute the total surface motion (or RVL, …? TODO need to agree on the naming) including Wind-wave Artefact Surface Velocity (WASV) + surface current.
- Parameters:
L1 (xarray.Dataset) – A Dataset containing IncidenceAngleImage, AntennaAzimuthImage and Polarization.
aux_geo (xarray.Dataset) – A Dataset containing OceanSurfaceWindSpeed, OceanSurfaceWindDirection, CurrentVelocity, CurrentDirection
gmf (str) – Option for geophysical model function. ‘mouche12’, ‘yurovsky19’ with kwargs for options.
**kwargs (TYPE) – Optional arguments.
- Raises:
Exception – Exception raised if LookDirection is not in the form of a 2D array.
- Returns:
da – A DataArray containing the Radial Velocity for the given geophysical and geometric conditions.
- Return type:
xarray.DataArray
- seastar.gmfs.doppler.compute_wasv(L1, aux_geo, gmf, **kwargs)
Compute the Wind-wave Artefact Surface Velocity (WASV).
Compute the Wind-wave Artefact Surface Velocity (WASV) for ‘L1’ data as function of geophysical conditions.
- Parameters:
L1 (xarray.Dataset) – A Dataset containing IncidenceAngleImage, AntennaAzimuthImage and Polarization
aux_geo (xarray.Dataset) – A Dataset containing OceanSurfaceWindSpeed, OceanSurfaceWindDirection.
gmf (str) – Option for geophysical model function. ‘mouche12’, ‘yurovsky19’ with kwargs for options.
**kwargs (TYPE) – Optional arguments.
- Raises:
Exception – Exception raised if LookDirection is not in the form of a 2D array.
- Returns:
ds_wa – A Dataset containing the Wind Artefact Surface Velocity (WASV) for the given geophysical and geometric conditions.
- Return type:
xarray.Dataset
- seastar.gmfs.doppler.convertDoppler2Velocity(freq_GHz, dop, inci)
Convert Doppler shift to surface velocity.
Convert Doppler shift (Hz) to surface velocity (m/s)
- Parameters:
freq_GHz (float) – Central electromagnetic frequency (GHz).
dop (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Doppler shift (Hz).inci (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Incidence angle (degrees from nadir).
- Raises:
Exception – Exception for central frequency not being in GHz.
- Returns:
los_vel (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Line-of-sight velocity (m/s).surf_vel (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Surface velocity (m/s).
- seastar.gmfs.doppler.get_second_harmonic_inci_legendre(phi, inc, gmf: str) list
Load empirical GMF following a second harmonic fit in azimuth, with Legendre polymonial fit in incidence angle
The curve is of the form: An + Bn*cos(phi) + Cn*cos(2phi) With, An, Bn, Cn Legendre polymonial of order ‘n’ over the normalised domain in incidence angle: x = 2*(inci - inci_centre)/inci_range
- Parameters:
phi (
float,numpy.array,numpy.ndarray,xarray.DataArray) –- Angle between wind and look directions (degrees) in range 0 (upwind) :
90 (crosswind) : 180 (downwind).
inc (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Incidence angle of radar beam (degrees from nadir).gmf (str) – One of the following string format: “oscar20220522T11-18_v20250318”
- Returns:
wasv_rsv – Radial surface velocity (m/s)
- Return type:
float,numpy.ndarray,xarray.DataArray
- seastar.gmfs.doppler.mouche12(u10, phi, inc, pol)
Compute Doppler shift due to wind from Mouche (2012).
Compute the Doppler shift due to the wind using the geophysical model function of Mouche (2012). Input parameters u10, phi and inc must be in identical sizes and formats.
- Parameters:
u10 (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Wind speed (m/s) at 10m above sea surface.phi (
float,numpy.array,numpy.ndarray,xarray.DataArray) –- Angle between wind and look directions (degrees) in range 0 (upwind) :
90 (crosswind) : 180 (downwind).
inc (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Incidence angle of radar beam (degrees from nadir).pol (str) – Polarisation of radar beam (HH or VV).
- Raises:
Exception – Exception for inconsistency in sizes of input parameters. Exception for polarisation out of range of (HH,VV).
- Returns:
dop – Doppler shift (GHz) due to geophysical and geometric conditions.
- Return type:
float,numpy.array,numpy.ndarray,xarray.DataArray
- seastar.gmfs.doppler.oscar_empirical_wasv(u10: float, phi: float, inc: float, pol: float, gmf: str) float
Compute Doppler shift due to the empirical geophysical model function derived from oscar measurements.
- Parameters:
u10 (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Wind speed (m/s) at 10m above sea surface.phi (
float,numpy.array,numpy.ndarray,xarray.DataArray) –- Angle between wind and look directions (degrees) in range 0 (upwind) :
90 (crosswind) : 180 (downwind).
inc (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Incidence angle of radar beam (degrees from nadir).pol (str) – Polarisation of radar beam (VV).
gmf (str) – Valid GMFs: ‘oscar20220522T11-18_v20250318’
- Raises:
Exception – Exception raised if unknown gmf. It should be one of the described above.
- Returns:
wasv_rsv (
float,numpy.ndarray,xarray.DataArray) – Radial surface velocity# TODO uncerty_rsv (
float,numpy.ndarray,xarray.DataArray)# Uncertainty on the rsv as infered from the fit
- seastar.gmfs.doppler.yurovsky19(theta, phi, u, swh_sw=0, omega_sw=0, phi_sw=0, drift=0.015, lambdar=0.008, beta_ws=0.2, beta_sw=0.0625, zerocrosswind=False, **kwargs)
Compute Doppler shift due to wind using Yurovsky (2019).
Compute Doppler shift due to the geophysical model function of Yurovsky (2019).
KaDOP computes sea surface Doppler spectrum centroid for VV and HH polarizations, DCvv and DChh, based on the empirical MTF [10.1109/TGRS.2017.2787459] DC is expressed in m/s, DC[m/s]= DC[Hz]*lambda/2, where lambda is the radar wavelength. By default, the DC is estimated for Pierson-Moskowitz (PM), [10.1029/JZ069i024p05181] Wind sea spectrum without swell. If significant wave height (SWH) and peak frequency (omega) are known, they can be specified explicitly. Swell can be added independently by specifying its SWH and omega, no swell by default.
- Parameters:
theta (
float,numpy.ndarray,xarray.DataArray) – Incidence angle (degrees from nadir) in the range (0:60).phi (
float,numpy.ndarray,xarray.DataArray) –- Angle between wind and look directions (degrees) in range 0 (upwind) :
90 (crosswind) : 180 (downwind).
u (
float,numpy.ndarray,xarray.DataArray) – Wind speed (m/s) at 10m above sea surface.swh_sw (TYPE, optional) – Swell significant wave hight (m). The default is 0.
omega_sw (TYPE, optional) – Swell peak radial frequency (rad/s). The default is 0.
phi_sw (TYPE, optional) – Radar-to-swell relative direction (degrees). The default is 0.
drift (TYPE, optional) – Wind-drift coefficient. The default is 0.015 (1.5% U).
lambdar (TYPE, optional) – Radar wavelength (m). The default is 0.008 (Ka-band).
beta_ws (TYPE, optional) – 3rd moment of Wind Sea spectrum (Pierson-Moskowitz) parameter. The default is 0.20.
beta_sw (TYPE, optional) – 3rd moment of Swell spectrum parameter. The default is 0.0625.
zerocrosswind (bool, optional) – If this parameter set to 1, the MTFwindsea is replaced by MTFswell (crosswind is zeroed). The default is False.
**kwargs (TYPE) – DESCRIPTION.
- Returns:
VV (
float,numpy.ndarray,xarray.DataArray) – Sea surface Doppler Velocity for VV polarizationHH (
float,numpy.ndarray,xarray.DataArray) – Sea surface Doppler Velocity centroid for HH polarization
NRCS
The NRCS section concerns all the elements directly related to the Normalized Radar Cross Section (NRCS).
A Ku-band GMF to compute NRCS is available in this package: nscat4ds.
The methods are described below:
Functions to compute Normalised Radar Cross Section data.
- seastar.gmfs.nrcs.cmod7(u10, phi, inc, pol=1)
Compute sigma0 due to wind. admartin@noc.ac.uk adapted from (c) 2017 Anton Verhoef, KNMI Royal Netherlands Meteorological Institute
Input parameters u10, phi, inc and pol must be in identical sizes and formats.
- Parameters:
u10 (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Wind speed (m/s) at 10m above sea surface. GMF built for wind speed ranging from 0.2 m/s to 50 m/s.phi (
float,numpy.array,numpy.ndarray,xarray.DataArray) –- Angle between wind and look directions (degrees) in range 0 (upwind) :
90 (crosswind) : 180 (downwind).
inc (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Incidence angle of radar beam (degrees from nadir). GMF built for incidence angle ranging from 16° to 66°.pol (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Polarisation of radar beam (1 for VV). No HH polarisation.
- Raises:
Exception – Exception for inconsistency in sizes of input parameters. Exception for polarisation out of range of (1,2) for (VV,HH).
- Returns:
sigma0 – NRCS due to geophysical and geometric conditions of the same size as the input.
- Return type:
float,numpy.array,xarray.DataArray
- seastar.gmfs.nrcs.compute_nrcs(L1_combined, aux_geo, gmf)
Compute Normalized Radar Cross Section (nrcs).
Compute NRCS (Sigma0) using incidence angle, antenna polarization and OceanSurfaceWindSpeed/direction data.
- Parameters:
L1_combined (
xr.Dataset) – Dataset containing IncidenceAngleImage and antenna polarization dataaux_geo (
xr.Dataset) – Geophysical parameter dataset containing OceanSurfaceWindSpeed and Direction data
- Returns:
nrcs – Dataset of computed Normalized Radar Cross Section DataArrays, arranged along a dimension corresponding to antenna position
- Return type:
xr.Dataset
- seastar.gmfs.nrcs.get_gmf_table_and_points(gmf_model)
Load the GMF table and corresponding points for a given GMF model.
- Parameters:
gmf_model (
str) – The GMF model to load. Supported options are ‘nscat4ds’ or ‘cmod7’.- Returns:
A tuple containing: - numpy.ndarray: The GMF table. - tuple of numpy.ndarray: The corresponding points, which include arrays for wspd, rdir, inci, and optionally pol.
- Return type:
tuple
- seastar.gmfs.nrcs.nscat4ds(u10, phi, inc, pol)
Compute sigma0 due to wind. admartin@noc.ac.uk adapted from (c) 2017 Anton Verhoef, KNMI Royal Netherlands Meteorological Institute
Input parameters u10, phi, inc and pol must be in identical sizes and formats.
- Parameters:
u10 (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Wind speed (m/s) at 10m above sea surface. GMF built for wind speed ranging from 0.2 m/s to 50 m/s.phi (
float,numpy.array,numpy.ndarray,xarray.DataArray) –- Angle between wind and look directions (degrees) in range 0 (upwind) :
90 (crosswind) : 180 (downwind).
inc (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Incidence angle of radar beam (degrees from nadir). GMF built for incidence angle ranging from 16° to 66°.pol (
float,numpy.array,numpy.ndarray,xarray.DataArray) – Polarisation of radar beam (1 for VV, 2 for HH). Any value between 1 and 2 will be a linear interpolation
- Raises:
Exception – Exception for inconsistency in sizes of input parameters. Exception for polarisation out of range of (1,2) for (VV,HH).
- Returns:
sigma0 – NRCS due to geophysical and geometric conditions of the same size as the input.
- Return type:
float,numpy.array,xarray.DataArray