A PODAAC Cloud Hackathon for SWOT Oceanography Science Teams
Jinbo Wang
SWOT Scientist/PODAAC Project Scientist
3/16/2022
Introduction
The SWOT data stream is built based on AWS services. It is important for the science teams to get familiarized with the new way of data access and analyses. Most importantly, the cloud-based infrastructure enables “cloud paradigm” for “moving code to data”. This concept is not new. The community has been using large high-performance computing clusters for decades. However, the integration of the cloud computing infrastructure and a data center through a public-facing commercial partner is new and enables “open data and open science” to a larger scale.
The cloud-based data ingestion was created to meet the large data volume from SWOT. The cloud infrastructure will, in addition, accelerate the scientific and application development for SWOT. The 8 sets of synthetic SWOT global L2 SSH products are used to test the cloud-based data flow and to prepare the science teams for the SWOT launch in November 2023.
The Creation of the synthetic SWOT global L2 SSH
SWOT Oceanography data/code survey (2021 Science Team Meeting)
Shortly before the 2021 SWOT Science Team meeting, a survey was created to ask for the SWOT oceanography community’s opinion about data and code sharing. In summary, the community showed high interests in a set of synthetic SWOT global L2 SSH hosted by PODAAC/AVISO, as well as pre-launch training. The survey response can be accessed here. The following are a few takeaways.
L2 basic/expert SSH will be mostly used data products at the initial stage
A common datesets will be very useful for preparation of the SWOT research
It is important for PODAAC/AVISO to host simulated datasets to create postlaunch scenarios
Most teams need training in data access and analyses
Majorities are potentially interested in co-developing softwares and toolboxes.
Simulated L2 SSH
The SWOTsimulator was used on two global ocean simulations (LLC4320 and GLORYS) following the error specification described in Level 2 KaRIn Low Rate Sea Surface Height Product PDF file (D-56407). The simulator was based on Lucile/Clement/Fu’s first version but was almost completely rewritten, while keeping the error budget largely unchanged. (The error representation is claimed to be better but needs more documentation.) The CNES team is the creator of these products. The 8 datasets are listed as follows:
The ECCO_LLC4320-based products cover one-year duration with >10k files (granules in Earthdata language) in each collection. The GLORYS-based products cover about 20 months with >17k files in each collection.
Relevant content in the simulated L2 SSH files
There are too much information in these datasets for this short cloud hackathon. For example, there are 92 variables in the KaRIn products. The hackathon participants are strongly encouraged to read the the product description to understand the meaning of different variables. For this exercise, the variables with “simulated” keyword are most relevant: 1. ‘simulated_true_ssh_karin’ 1. ‘simulated_error_baseline_dilation’ 1. ‘simulated_error_roll’ 1. ‘simulated_error_phase’ 1. ‘simulated_error_timing’ 1. ‘simulated_error_karin’ 1. ‘simulated_error_orbital’ 1. ‘simulated_error_troposphere’
A visualized example is provided at the end of this notebook.
Note that the LLC4320 SSH includes the barotropic (BT) signals, internal tides and atmospheric pressure (IB). A proper correction is not yet provided/validated. Wang et al. (2018) found that a linear detrend within ~150km range may be sufficient to remove most of the large-scale BT and IB signals. It can be a quick solution but no guarantee about the size of the residual errors.
Other SWOT relevant datasets
Other datasets in PODAAC that are relevant to SWOT include 10 regional subsets of LLC4320 with all the 2D and 3D fields created to support Adopt-A-Crossover (AdAC) project. You will find the dynamic correspondence of the ECCO_LLC4320-based L2 SSH to these subsets. Sentinel-6MF alongtrack data are also hosted in PODAAC cloud.
F. Briol, Gerald Dibarbource, Nicolas Picot, Shailen Desai produced the data products
J. Tom Farrar, Julien le Sommer, Ryan Abernathey, Sarah Gille, Rosemary Morrow, Lee-Lueng Fu provided science team support
Nadya Vinogradova requested this cloud hackathon. Jessica Hausman facilitated the coordination.
Justin Rice facilitates the PODAAC-openscapes collaboration
Openscapes provides cloud-jupyterhub
PO.DAAC team (everything else here)
Simulated L2 fields with errors
Run the following code blocks in US-WEST-2 to browse the datasets and the data content and visualize the swaths of L2 SSH and errors. These code blocks are based on Mike Gangl’s “direct S3 access” notebook.
from matplotlib import pylab as pltimport xarray as xrimport numpy as npfrom pprint import pprintdef init_S3FileSystem(daac='podaac'):''' This function will return a S3filesystem using s3fs. Parameter ========= daac: string The name of the NASA DAAC where the data are hosted. The options are ['podaac','lpdaac'] and others to be added Return ====== s3: a s3fs handle '''import requests,s3fs s3_cred_endpoint = {'podaac':'https://archive.podaac.earthdata.nasa.gov/s3credentials','lpdaac':'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials'} temp_creds_url = s3_cred_endpoint[daac] creds = requests.get(temp_creds_url).json() s3 = s3fs.S3FileSystem(anon=False, key=creds['accessKeyId'], secret=creds['secretAccessKey'], token=creds['sessionToken'])return s3s3sys=init_S3FileSystem()def open_swot_L2SSH(filename):''' Open a file in S3 using xarray. Parameter ======== filename: S3 link to the data file. Return ====== xarray Dataset '''return xr.open_dataset(s3sys.open(filename))
Browsing the 8 datasets in s3://podaac-ops-cumulus-protected
All PODAAC data collections are stored in s3://podaac-ops-cumulus-protected and/or s3://podaac-ops-cumulus-public. Once you are on AWS computing instance, they can be accessed like accessing to your own harddrives from your laptop.
#The 8 datasets have short names starting from "SWOT". #You may get more than these 8 collections in the future after new SWOT data ingested. #The following wildcard will give you the 8 collections for now.s3path="s3://podaac-ops-cumulus-protected/SWOT*"#Search all collections that fit to the wildcard.fns= s3sys.glob(s3path)#Print the short names of the collection (also used as 'folder' names) and the number of files (granules) within. for aa in fns:print('%55s'%aa.split('/')[-1], len(s3sys.glob(aa+'/*nc')), 'files')#Print the name of the first 10 files in the SWOT_SIMULATED_L2_KARIN_SSH_ECCO_LLC4320_CALVAL_V1 collection.fns=s3sys.glob("s3://podaac-ops-cumulus-protected/SWOT_SIMULATED_L2_KARIN_SSH_ECCO_LLC4320_CALVAL_V1/*nc")pprint(fns[:10])
The following code uses the function temporarily defined in the first block to open a file from ‘fns’. The function includes establishing a direct S3 access and opening with xarray. It returns a xarray Dataset.
Time of measurement in seconds in the UTC time scale since 1 Jan 2000 00:00:00 UTC. [tai_utc_difference] is the difference between TAI and UTC reference time (seconds) for the first measurement of the data set. If a leap second occurs within the data set, the attribute leap_second is set to the UTC time at which the leap second occurs.
Time of measurement in seconds in the TAI time scale since 1 Jan 2000 00:00:00 TAI. This time scale contains no leap seconds. The difference (in seconds) with time in UTC is given by the attribute [time:tai_utc_difference].
Fully corrected sea surface height measured by KaRIn. The height is relative to the reference ellipsoid defined in the global attributes. This value is computed using radiometer measurements for wet troposphere effects on the KaRIn measurement (e.g., rad_wet_tropo_cor and sea_state_bias_cor).
[700628 values with dtype=float64]
ssh_karin_uncert
(num_lines, num_pixels)
float32
...
long_name :
sea surface height anomaly uncertainty
units :
m
valid_min :
0
valid_max :
60000
comment :
1-sigma uncertainty on the sea surface height from the KaRIn measurement.
[700628 values with dtype=float32]
ssha_karin
(num_lines, num_pixels)
float64
...
long_name :
sea surface height anomaly
units :
m
valid_min :
-1000000
valid_max :
1000000
comment :
Sea surface height anomaly from the KaRIn measurement = ssh_karin - mean_sea_surface_cnescls - solid_earth_tide - ocean_tide_fes – internal_tide_hret - pole_tide - dac.
[700628 values with dtype=float64]
ssh_karin_2
(num_lines, num_pixels)
float64
...
long_name :
sea surface height
standard_name :
sea surface height above reference ellipsoid
units :
m
valid_min :
-15000000
valid_max :
150000000
comment :
Fully corrected sea surface height measured by KaRIn. The height is relative to the reference ellipsoid defined in the global attributes. This value is computed using model-based estimates for wet troposphere effects on the KaRIn measurement (e.g., model_wet_tropo_cor and sea_state_bias_cor_2).
[700628 values with dtype=float64]
ssha_karin_2
(num_lines, num_pixels)
float64
...
long_name :
sea surface height anomaly
units :
m
valid_min :
-1000000
valid_max :
1000000
comment :
Sea surface height anomaly from the KaRIn measurement = ssh_karin_2 - mean_sea_surface_cnescls - solid_earth_tide - ocean_tide_fes – internal_tide_hret - pole_tide - dac.
[700628 values with dtype=float64]
ssha_karin_qual
(num_lines, num_pixels)
float64
...
long_name :
sea surface height quality flag
standard_name :
status_flag
flag_meanings :
good bad
flag_values :
[0 1]
valid_min :
0
valid_max :
1
comment :
Quality flag for the SSHA from KaRIn.
[700628 values with dtype=float64]
polarization_karin
(num_lines, num_sides)
object
...
long_name :
polarization for each side of the KaRIn swath
comment :
H denotes co-polarized linear horizontal, V denotes co-polarized linear vertical.
Normalized radar cross section (sigma0) from KaRIn in real, linear units (not decibels). The value may be negative due to noise subtraction. The value is corrected for instrument calibration and atmospheric attenuation. Radiometer measurements provide the atmospheric attenuation (sig0_cor_atmos_rad).
[700628 values with dtype=float32]
sig0_karin_uncert
(num_lines, num_pixels)
float32
...
long_name :
1-sigma uncertainty on sigma0 from KaRIn
units :
1
valid_min :
0.0
valid_max :
1000.0
comment :
1-sigma uncertainty on sigma0 from KaRIn.
[700628 values with dtype=float32]
sig0_karin_2
(num_lines, num_pixels)
float32
...
long_name :
normalized radar cross section (sigma0) from KaRIn
Normalized radar cross section (sigma0) from KaRIn in real, linear units (not decibels). The value may be negative due to noise subtraction. The value is corrected for instrument calibration and atmospheric attenuation. A meteorological model provides the atmospheric attenuation (sig0_cor_atmos_model).
[700628 values with dtype=float32]
wind_speed_karin
(num_lines, num_pixels)
float32
...
long_name :
wind speed from KaRIn
standard_name :
wind_speed
source :
TBD
units :
m/s
valid_min :
0
valid_max :
65000
comment :
Wind speed from KaRIn computed from sig0_karin.
[700628 values with dtype=float32]
wind_speed_karin_2
(num_lines, num_pixels)
float32
...
long_name :
wind speed from KaRIn
standard_name :
wind_speed
source :
TBD
units :
m/s
valid_min :
0
valid_max :
65000
comment :
Wind speed from KaRIn computed from sig0_karin_2.
[700628 values with dtype=float32]
swh_karin_qual
(num_lines, num_pixels)
float64
...
long_name :
quality flag for significant wave height from KaRIn.
standard_name :
status_flag
flag_meanings :
good bad
flag_values :
[0 1]
valid_min :
0
valid_max :
1
comment :
Quality flag for significant wave height from KaRIn.
[700628 values with dtype=float64]
sig0_karin_qual
(num_lines, num_pixels)
float64
...
long_name :
quality flag for sigma0 from KaRIn.
standard_name :
status_flag
flag_meanings :
good bad
flag_values :
[0 1]
valid_min :
0
valid_max :
1
comment :
Quality flag for sigma0 from KaRIn.
[700628 values with dtype=float64]
num_pt_avg
(num_lines, num_pixels)
float32
...
long_name :
number of samples averaged
units :
1
valid_min :
0
valid_max :
289
comment :
Number of native unsmoothed, beam-combined KaRIn samples averaged.
[700628 values with dtype=float32]
swh_model
(num_lines, num_pixels)
float32
...
long_name :
significant wave height from wave model
standard_name :
sea_surface_wave_significant_height
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
units :
m
valid_min :
0
valid_max :
30000
comment :
Significant wave height from model.
[700628 values with dtype=float32]
mean_wave_direction
(num_lines, num_pixels)
float32
...
long_name :
mean sea surface wave direction
source :
Meteo France Wave Model (MF-WAM)
institution :
Meteo France
units :
degree
valid_min :
0
valid_max :
36000
comment :
Mean sea surface wave direction.
[700628 values with dtype=float32]
mean_wave_period_t02
(num_lines, num_pixels)
float32
...
long_name :
sea surface wind wave mean period
standard_name :
sea_surface_wave_significant_period
source :
Meteo France Wave Model (MF-WAM)
institution :
Meteo France
units :
s
valid_min :
0
valid_max :
100
comment :
Sea surface wind wave mean period from model spectral density second moment.
[700628 values with dtype=float32]
wind_speed_model_u
(num_lines, num_pixels)
float32
...
long_name :
u component of model wind
standard_name :
eastward_wind
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
units :
m/s
valid_min :
-30000
valid_max :
30000
comment :
Eastward component of the atmospheric model wind vector at 10 meters.
[700628 values with dtype=float32]
wind_speed_model_v
(num_lines, num_pixels)
float32
...
long_name :
v component of model wind
standard_name :
northward_wind
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
units :
m/s
valid_min :
-30000
valid_max :
30000
comment :
Northward component of the atmospheric model wind vector at 10 meters.
Approximate distance to the nearest coast point along the Earth surface.
[700628 values with dtype=float32]
heading_to_coast
(num_lines, num_pixels)
float32
...
long_name :
heading to coast
units :
degrees
valid_min :
0
valid_max :
35999
comment :
Approximate compass heading (0-360 degrees with respect to true north) to the nearest coast point.
[700628 values with dtype=float32]
ancillary_surface_classification_flag
(num_lines, num_pixels)
float32
...
long_name :
surface classification
standard_name :
status_flag
source :
MODIS/GlobCover
institution :
European Space Agency
flag_meanings :
open_ocean land continental_water aquatic_vegetation continental_ice_snow floating_ice salted_basin
flag_values :
[0 1 2 3 4 5 6]
valid_min :
0
valid_max :
6
comment :
7-state surface type classification computed from a mask built with MODIS and GlobCover data.
[700628 values with dtype=float32]
dynamic_ice_flag
(num_lines, num_pixels)
float32
...
long_name :
dynamic ice flag
standard_name :
status_flag
source :
EUMETSAT Ocean and Sea Ice Satellite Applications Facility
institution :
EUMETSAT
flag_meanings :
no_ice probable_ice ice
flag_values :
[0 1 2]
valid_min :
0
valid_max :
2
comment :
Dynamic ice flag for the location of the KaRIn measurement.
[700628 values with dtype=float32]
rain_flag
(num_lines, num_pixels)
float32
...
long_name :
rain flag
standard_name :
status_flag
flag_meanings :
no_rain probable_rain rain
flag_values :
[0 1 2]
valid_min :
0
valid_max :
2
comment :
Flag indicates that signal is attenuated, probably from rain.
[700628 values with dtype=float32]
rad_surface_type_flag
(num_lines, num_sides)
float32
...
long_name :
radiometer surface type flag
standard_name :
status_flag
source :
Advanced Microwave Radiometer
flag_meanings :
open_ocean coastal_ocean land
flag_values :
[0 1 2]
valid_min :
0
valid_max :
2
comment :
Flag indicating the validity and type of processing applied to generate the wet troposphere correction (rad_wet_tropo_cor). A value of 0 indicates that open ocean processing is used, a value of 1 indicates coastal processing, and a value of 2 indicates that rad_wet_tropo_cor is invalid due to land contamination.
KMSF attitude yaw angle relative to the nadir track. The yaw angle is a right-handed rotation about the nadir (downward) direction. A yaw value of 0 deg indicates that the KMSF +x axis is aligned with the horizontal component of the Earth-relative velocity vector. A yaw value of 180 deg indicates that the spacecraft is in a yaw-flipped state, with the KMSF -x axis aligned with the horizontal component of the Earth-relative velocity vector.
array([nan, nan, nan, ..., nan, nan, nan])
velocity_heading
(num_lines)
float64
...
long_name :
heading of the spacecraft Earth-relative velocity vector
units :
degrees
valid_min :
0
valid_max :
359999999
comment :
Angle with respect to true north of the horizontal component of the spacecraft Earth-relative velocity vector. A value of 90 deg indicates that the spacecraft velocity vector pointed due east. Values between 0 and 90 deg indicate that the velocity vector has a northward component, and values between 90 and 180 deg indicate that the velocity vector has a southward component.
weighted average latitude of samples used to compute SSH
standard_name :
latitude
units :
degrees_north
valid_min :
-80000000
valid_max :
80000000
comment :
Latitude of measurement [-80,80]. Positive latitude is North latitude, negative latitude is South latitude. This value may be biased away from a nominal grid location if some of the native, unsmoothed samples were discarded during processing.
[700628 values with dtype=float64]
longitude_avg_ssh
(num_lines, num_pixels)
float64
...
long_name :
weighted average longitude of samples used to compute SSH
standard_name :
longitude
units :
degrees_east
valid_min :
0
valid_max :
359999999
comment :
Longitude of measurement. East longitude relative to Greenwich meridian. This value may be biased away from a nominal grid location if some of the native, unsmoothed samples were discarded during processing.
[700628 values with dtype=float64]
cross_track_distance
(num_lines, num_pixels)
float32
...
long_name :
cross track distance
units :
m
valid_min :
-75000.0
valid_max :
75000.0
comment :
Distance of sample from nadir. Negative values indicate the left side of the swath, and positive values indicate the right side of the swath.
[700628 values with dtype=float32]
x_factor
(num_lines, num_pixels)
float32
...
long_name :
radiometric calibration X factor as a composite value for the X factors of the +y and -y channels
units :
1
valid_min :
0.0
valid_max :
1e+20
comment :
Radiometric calibration X factor as a linear power ratio.
[700628 values with dtype=float32]
sig0_cor_atmos_model
(num_lines, num_pixels)
float32
...
long_name :
two-way atmospheric correction to sigma0 from model
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
units :
1
valid_min :
1.0
valid_max :
10.0
comment :
Atmospheric correction to sigma0 from weather model data as a linear power multiplier (not decibels). sig0_cor_atmos_model is already applied in computing sig0_karin_2.
[700628 values with dtype=float32]
sig0_cor_atmos_rad
(num_lines, num_pixels)
float32
...
long_name :
two-way atmospheric correction to sigma0 from radiometer data
source :
Advanced Microwave Radiometer
units :
1
valid_min :
1.0
valid_max :
10.0
comment :
Atmospheric correction to sigma0 from radiometer data as a linear power multiplier (not decibels). sig0_cor_atmos_rad is already applied in computing sig0_karin.
[700628 values with dtype=float32]
doppler_centroid
(num_lines, num_sides)
float32
...
long_name :
doppler centroid estimated by KaRIn
units :
1/s
valid_min :
-30000
valid_max :
30000
comment :
Doppler centroid (in hertz or cycles per second) estimated by KaRIn.
Mean sea surface height above the reference ellipsoid. The value is referenced to the mean tide system, i.e. includes the permanent tide (zero frequency).
[700628 values with dtype=float64]
mean_sea_surface_cnescls_uncert
(num_lines, num_pixels)
float32
...
long_name :
mean sea surface height accuracy (CNES/CLS)
source :
CNES_CLS_15
institution :
CNES/CLS
units :
m
valid_min :
0
valid_max :
10000
comment :
Accuracy of the mean sea surface height (mean_sea_surface_cnescls).
[700628 values with dtype=float32]
mean_sea_surface_dtu
(num_lines, num_pixels)
float64
...
long_name :
mean sea surface height (DTU)
source :
DTU18
institution :
DTU
units :
m
valid_min :
-1500000
valid_max :
1500000
comment :
Mean sea surface height above the reference ellipsoid. The value is referenced to the mean tide system, i.e. includes the permanent tide (zero frequency).
[700628 values with dtype=float64]
mean_sea_surface_dtu_uncert
(num_lines, num_pixels)
float32
...
long_name :
mean sea surface height accuracy (DTU)
source :
DTU18
institution :
DTU
units :
m
valid_min :
0
valid_max :
10000
comment :
Accuracy of the mean sea surface height (mean_sea_surface_dtu)
[700628 values with dtype=float32]
geoid
(num_lines, num_pixels)
float64
...
long_name :
geoid height
standard_name :
geoid_height_above_reference_ellipsoid
source :
EGM2008 (Pavlis et al., 2012)
units :
m
valid_min :
-1500000
valid_max :
1500000
comment :
Geoid height above the reference ellipsoid with a correction to refer the value to the mean tide system, i.e. includes the permanent tide (zero frequency).
[700628 values with dtype=float64]
mean_dynamic_topography
(num_lines, num_pixels)
float32
...
long_name :
mean dynamic topography
source :
CNES_CLS_18
institution :
CNES/CLS
units :
m
valid_min :
-30000
valid_max :
30000
comment :
Mean dynamic topography above the geoid.
[700628 values with dtype=float32]
mean_dynamic_topography_uncert
(num_lines, num_pixels)
float32
...
long_name :
mean dynamic topography accuracy
source :
CNES_CLS_18
institution :
CNES/CLS
units :
m
valid_min :
0
valid_max :
10000
comment :
Accuracy of the mean dynamic topography.
[700628 values with dtype=float32]
depth_or_elevation
(num_lines, num_pixels)
float32
...
long_name :
ocean depth or land elevation
source :
Altimeter Corrected Elevations, version 2
institution :
European Space Agency
units :
m
valid_min :
-12000
valid_max :
10000
comment :
Ocean depth or land elevation above reference ellipsoid. Ocean depth (bathymetry) is given as negative values, and land elevation positive values.
[700628 values with dtype=float32]
solid_earth_tide
(num_lines, num_pixels)
float32
...
long_name :
solid Earth tide height
source :
Cartwright and Taylor (1971) and Cartwright and Edden (1973)
units :
m
valid_min :
-10000
valid_max :
10000
comment :
Solid-Earth (body) tide height. The zero-frequency permanent tide component is not included.
[700628 values with dtype=float32]
ocean_tide_fes
(num_lines, num_pixels)
float64
...
long_name :
geocentric ocean tide height (FES)
source :
FES2014b (Carrere et al., 2016)
institution :
LEGOS/CNES
units :
m
valid_min :
-300000
valid_max :
300000
comment :
Geocentric ocean tide height. Includes the sum total of the ocean tide, the corresponding load tide (load_tide_fes) and equilibrium long-period ocean tide height (ocean_tide_eq).
[700628 values with dtype=float64]
ocean_tide_got
(num_lines, num_pixels)
float64
...
long_name :
geocentric ocean tide height (GOT)
source :
GOT4.10c (Ray, 2013)
institution :
GSFC
units :
m
valid_min :
-300000
valid_max :
300000
comment :
Geocentric ocean tide height. Includes the sum total of the ocean tide, the corresponding load tide (load_tide_got) and equilibrium long-period ocean tide height (ocean_tide_eq).
[700628 values with dtype=float64]
load_tide_fes
(num_lines, num_pixels)
float32
...
long_name :
geocentric load tide height (FES)
source :
FES2014b (Carrere et al., 2016)
institution :
LEGOS/CNES
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Geocentric load tide height. The effect of the ocean tide loading of the Earth's crust. This value has already been added to the corresponding ocean tide height value (ocean_tide_fes).
[700628 values with dtype=float32]
load_tide_got
(num_lines, num_pixels)
float32
...
long_name :
geocentric load tide height (GOT)
source :
GOT4.10c (Ray, 2013)
institution :
GSFC
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Geocentric load tide height. The effect of the ocean tide loading of the Earth's crust. This value has already been added to the corresponding ocean tide height value (ocean_tide_got).
[700628 values with dtype=float32]
ocean_tide_eq
(num_lines, num_pixels)
float32
...
long_name :
equilibrium long-period ocean tide height
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Equilibrium long-period ocean tide height. This value has already been added to the corresponding ocean tide height values (ocean_tide_fes and ocean_tide_got).
[700628 values with dtype=float32]
ocean_tide_non_eq
(num_lines, num_pixels)
float32
...
long_name :
non-equilibrium long-period ocean tide height
source :
FES2014b (Carrere et al., 2016)
institution :
LEGOS/CNES
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Non-equilibrium long-period ocean tide height. This value is reported as a relative displacement with repsect to ocean_tide_eq. This value can be added to ocean_tide_eq, ocean_tide_fes, or ocean_tide_got, or subtracted from ssha_karin and ssha_karin_2, to account for the total long-period ocean tides from equilibrium and non-equilibrium contributions.
[700628 values with dtype=float32]
internal_tide_hret
(num_lines, num_pixels)
float32
...
long_name :
coherent internal tide (HRET)
source :
Zaron (2019)
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Coherent internal ocean tide. This value is subtracted from the ssh_karin and ssh_karin_2 to compute ssha_karin and ssha_karin_2, respectively.
[700628 values with dtype=float32]
internal_tide_sol2
(num_lines, num_pixels)
float32
...
long_name :
coherent internal tide (Model 2)
source :
TBD
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Coherent internal tide.
[700628 values with dtype=float32]
pole_tide
(num_lines, num_pixels)
float32
...
long_name :
geocentric pole tide height
source :
Wahr (1985) and Desai et al. (2015)
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Geocentric pole tide height. The total of the contribution from the solid-Earth (body) pole tide height, the ocean pole tide height, and the load pole tide height (i.e., the effect of the ocean pole tide loading of the Earth's crust).
[700628 values with dtype=float32]
dac
(num_lines, num_pixels)
float32
...
long_name :
dynamic atmospheric correction
source :
MOG2D
institution :
LEGOS/CNES/CLS
units :
m
valid_min :
-12000
valid_max :
12000
comment :
Model estimate of the effect on sea surface topography due to high frequency air pressure and wind effects and the low-frequency height from inverted barometer effect (inv_bar_cor). This value is subtracted from the ssh_karin and ssh_karin_2 to compute ssha_karin and ssha_karin_2, respectively. Use only one of inv_bar_cor and dac.
[700628 values with dtype=float32]
inv_bar_cor
(num_lines, num_pixels)
float32
...
long_name :
static inverse barometer effect on sea surface height
units :
m
valid_min :
-2000
valid_max :
2000
comment :
Estimate of static effect of atmospheric pressure on sea surface height. Above average pressure lowers sea surface height. Computed by interpolating ECMWF pressure fields in space and time. The value is included in dac. To apply, add dac to ssha_karin and ssha_karin_2 and subtract inv_bar_cor.
[700628 values with dtype=float32]
model_dry_tropo_cor
(num_lines, num_pixels)
float32
...
long_name :
dry troposphere vertical correction
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
units :
m
valid_min :
-30000
valid_max :
-15000
comment :
Equivalent vertical correction due to dry troposphere delay. The reported sea surface height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported sea surface height results in the uncorrected sea surface height.
[700628 values with dtype=float32]
model_wet_tropo_cor
(num_lines, num_pixels)
float32
...
long_name :
wet troposphere vertical correction from weather model data
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
units :
m
valid_min :
-10000
valid_max :
0
comment :
Equivalent vertical correction due to wet troposphere delay from weather model data. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported sea surface height (ssh_karin_2) results in the uncorrected sea surface height.
[700628 values with dtype=float32]
rad_wet_tropo_cor
(num_lines, num_pixels)
float32
...
long_name :
wet troposphere vertical correction from radiometer data
source :
Advanced Microwave Radiometer
units :
m
valid_min :
-10000
valid_max :
0
comment :
Equivalent vertical correction due to wet troposphere delay from radiometer measurements. The reported pixel height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported sea surface height (ssh_karin) results in the uncorrected sea surface height.
[700628 values with dtype=float32]
iono_cor_gim_ka
(num_lines, num_pixels)
float32
...
long_name :
ionosphere vertical correction
source :
Global Ionosphere Maps
institution :
JPL
units :
m
valid_min :
-5000
valid_max :
0
comment :
Equivalent vertical correction due to ionosphere delay. The reported sea surface height, latitude and longitude are computed after adding negative media corrections to uncorrected range along slant-range paths, accounting for the differential delay between the two KaRIn antennas. The equivalent vertical correction is computed by applying obliquity factors to the slant-path correction. Adding the reported correction to the reported sea surface height results in the uncorrected sea surface height.
[700628 values with dtype=float32]
height_cor_xover
(num_lines, num_pixels)
float64
...
long_name :
height correction from KaRIn crossovers
units :
m
valid_min :
-100000
valid_max :
100000
comment :
Height correction from KaRIn crossover calibration. To apply this correction the value of height_cor_xover should be added to the value of ssh_karin, ssh_karin_2, ssha_karin, and ssha_karin_2.
[700628 values with dtype=float64]
correction_flag
(num_lines, num_pixels)
float32
...
long_name :
quality flag for corrections
standard_name :
status_flag
flag_meanings :
good bad
flag_values :
[0 1]
valid_min :
0
valid_max :
1
comment :
Quality flag for corrections.
[700628 values with dtype=float32]
rain_rate
(num_lines, num_pixels)
float32
...
long_name :
rain rate from weather model
source :
European Centre for Medium-Range Weather Forecasts
institution :
ECMWF
units :
mm/hr
valid_min :
0
valid_max :
200
comment :
Rain rate from weather model.
[700628 values with dtype=float32]
ice_conc
(num_lines, num_pixels)
float32
...
long_name :
concentration of sea ice
standard_name :
sea_ice_area_fraction
source :
EUMETSAT Ocean and Sea Ice Satellite Applications Facility
institution :
EUMETSAT
units :
%
valid_min :
0
valid_max :
10000
comment :
Concentration of sea ice from model.
[700628 values with dtype=float32]
sea_state_bias_cor
(num_lines, num_pixels)
float32
...
long_name :
sea state bias correction to height
source :
TBD
units :
m
valid_min :
-6000
valid_max :
0
comment :
Sea state bias correction to ssh_karin. Adding the reported correction to the reported sea surface height results in the uncorrected sea surface height. The wind_speed_karin value is used to compute this quantity.
[700628 values with dtype=float32]
sea_state_bias_cor_2
(num_lines, num_pixels)
float32
...
long_name :
sea state bias correction to height
source :
TBD
units :
m
valid_min :
-6000
valid_max :
0
comment :
Sea state bias correction to ssh_karin_2. Adding the reported correction to the reported sea surface height results in the uncorrected sea surface height. The wind_speed_karin_2 value is used to compute this quantity.
[700628 values with dtype=float32]
swh_sea_state_bias
(num_lines, num_pixels)
float32
...
long_name :
SWH used in sea state bias correction
units :
m
valid_min :
0
valid_max :
25000
comment :
Significant wave height used in sea state bias correction.
[700628 values with dtype=float32]
simulated_true_ssh_karin
(num_lines, num_pixels)
float64
...
long_name :
sea surface height
standard_name :
sea surface height above reference ellipsoid
units :
m
valid_min :
-15000000
valid_max :
150000000
comment :
Height of the sea surface free of measurement errors.
[700628 values with dtype=float64]
simulated_error_baseline_dilation
(num_lines, num_pixels)
float64
...
long_name :
Error due to baseline mast dilation
units :
m
[700628 values with dtype=float64]
simulated_error_timing
(num_lines, num_pixels)
float64
...
long_name :
Timing error
units :
m
[700628 values with dtype=float64]
simulated_error_roll
(num_lines, num_pixels)
float64
...
long_name :
Error due to roll
units :
m
[700628 values with dtype=float64]
simulated_error_phase
(num_lines, num_pixels)
float64
...
long_name :
Error due to phase
units :
m
[700628 values with dtype=float64]
simulated_error_karin
(num_lines, num_pixels)
float64
...
long_name :
KaRIn error
units :
m
[700628 values with dtype=float64]
simulated_error_orbital
(num_lines, num_pixels)
float64
...
long_name :
Error due to orbital perturbations
units :
m
[700628 values with dtype=float64]
simulated_error_troposphere
(num_lines, num_pixels)
float64
...
long_name :
Error due to wet troposphere path delay
units :
m
[700628 values with dtype=float64]
Conventions :
CF-1.7
title :
Level 2 Low Rate Sea Surface Height Data Product - Expert SSH with Wind and Wave
institution :
CNES/JPL
source :
Simulate product
history :
2021-09-23 07:47:11Z : Creation
platform :
SWOT
product_version :
1.2.1.dev10
references :
Gaultier, L., C. Ubelmann, and L.-L. Fu, 2016: The Challenge of Using Future SWOT Data for Oceanic Field Reconstruction. J. Atmos. Oceanic Technol., 33, 119-126, doi:10.1175/jtech-d-15-0160.1. http://dx.doi.org/10.1175/JTECH-D-15-0160.1.
The following line returns a list of filenames with the full S3 link within the collection SWOT_SIMULATED_L2_KARIN_SSH_ECCO_LLC4320_SCIENCE_V1, the simulated KaRIn L2 swaths on the science orbit based on ECCO_LLC4320.
Plot eight simulated L2 fields including the model truth and simulated errors.
There may be a bug in creating the timing error by the new simulator. According to SWOT_D-79084, the timing drift error, to the first order, creates a constant height bias across the swath. It accounts for 10% of the overall error budget. The first version of the SWOTsimulator correctly implemented it but not in the second simulator. Currently I am communicting with the CNES team.
data=open_swot_L2SSH(fns[100])fig,ax=plt.subplots(2,4,figsize=(20,10),sharex=True)axx=ax.flatten()keys=[]for key in data.keys():if'simulated'in key: keys.append(key)print(keys)for i, key inenumerate(keys): data[key][1000:1100,:].plot(ax=axx[i],) axx[i].set_title(key)plt.tight_layout()
#Plot an example of one passimport osos.getcwd()import pylab as pltimport numpy as npdd=s3sys.open(fns[1000])ds=xr.open_dataset(dd)#print(ds.keys())#ds=nc.Dataset("SWOT_L2_LR_SSH_Expert_018_290_20121112T003212_20121112T012339_DG10_01.nc")#print(ds.variables.keys())sla=ds['simulated_true_ssh_karin'].data.flatten()lat=ds['latitude'].data.flatten()lon=ds['longitude'].data.flatten()#mask=(lat>-40)&(lat<-20)&(lon>90)&(lon<96)#sla=np.ma.masked_array(sla,mask=~mask)#sla=np.ma.masked_invalid(sla)#print(sla.mean())#sla=sla-sla.mean()plt.figure(figsize=(10,6))plt.scatter(lon,lat,c=sla,cmap=plt.cm.jet,s=1)plt.colorbar(shrink=0.5)#plt.xlim(90,96)#plt.ylim(-40,-20)
<matplotlib.colorbar.Colorbar at 0x7fb08f856af0>
Save all passes into a signal file (experimental)
I used the following to save the lat/lon/time information from all passes and into a single (big) file. You can use it as a template to save other variables.
for fn in fns[1:]: #print(fn) dd=s3sys.open(fn) ds=xr.open_dataset(dd) lon=ds[‘longitude’][:,msk].values.astype(‘>f4’) lat=ds[‘latitude’][:,msk].values.astype(‘>f4’) time=ds[‘time’].values lon=xr.DataArray(lon,name=‘Longitude’,dims=(‘time’,‘num_pixels’),coords={‘time’:time}) lat=xr.DataArray(lat,name=‘Latitude’,dims=(‘time’,‘num_pixels’),coords={‘time’:time}) lons=xr.concat([lons,lon],dim=‘time’) lats=xr.concat([lats,lat],dim=‘time’) del lon,lat, dd, ds, time
Please engage with PODAAC by sharing your experience, sending feedback, and asking questions, either through podaac@podaac.jpl.nasa.gov or any of the PODAAC team members who you feel comfortable to communicate. Engagement leads to better services. Go SWOT!