8. Level 3 (L3) Product Specification#

8.1. Overview description of the GHRSST L3 data product#

GHRSST L3 data have been introduced to provide users with gridded, synthetic, and potentially adjusted SST products, bringing added value with respect to the original L2P but still allowing traceability to the original dataset. GHRSST L3 products do not use analysis or interpolation procedure to fill gaps where no observations are available. The GHRSST L3 products include:

  • Un-collated data that represent a straightforward remapping of L2P GHRSST data granules to a space grid without combining any observations from overlapping orbits or times. Although in principle these data may or may not be adjusted to a reference sensor, in practice the un-collated L3 will normally be a remapped L2P dataset. For remapping best practices of L2P on a grid, see Section 8.4.1.

  • Collated data that grid observations from a single instrument and a single platform into space and/or time bins. These data may or may not be adjusted to a reference sensor. For collating best practices, see Section 8.4.2 and for adjustment best practices see Section 8.4.3.

  • Super-collated data that combine observations from a multiple instruments into a space-time grid. In this case, the adjustment to a common reference is necessary to avoid heterogeneities in the resulting field. For best practices concerning the creation of super collated files see Section 8.4.4

As a result, the format of a L3 file will be able to cope with the three kinds of L3 SST presented above. The L3 format will include the following parts:

  1. In case the L3 is un-adjusted, a mandatory section containing the original L2P information remapped onto the grid point: the original sea surface temperature, quality level and SSES information. An optional section including the remapping condition information may also be provided. These files are essentially gridded L2P files.

  2. In case the L3 is adjusted to a reference, the adjusted SST value must be provided, together with the local bias to the reference, the error generated by the adjustment processing, and the overall error resulting from the combination of the SSES and the adjustment processing error.

  3. In case the L3 is super-collated, the source of SST at each pixel is mandatory.

Un-adjusted files: In the case of un-collated or collated un-adjusted L3 files the L3 file is derived from L2P data by a remapping process. The remapping and collating best practices are given in Section 8.4.1. Their content is thus identical to that of the L2P, but complementary, optional information on the remapping conditions may be provided.

Adjusted files: Collated files may or may not be adjusted, but a super-collated file is necessarily adjusted. The super-collating and adjustment best practices are described in Section 8.4.2 and Section 8.4.3. The principle governing this format is to allow traceability to the original L2P, while providing the best-adjusted SST value. A first section (in blue in Table 8.1) reproduces the original L2P SST and SSES information as in the un-adjusted version. The reference used to adjust the SST must be given in the “reference” attribute of the adjusted_sea_surface_temperature variable. The adjusted SST and some error information are also mandatory. This information, in yellow in Table 8.1, is:

  • adjusted_standard_deviation_error: the total error resulting from the combination of the SSES error and the adjustment procedure error, standard_deviation_to_reference_sst.

  • bias_to_reference_sst: the local value of the estimated difference between the original SST and the reference SST

  • standard_deviation_to_reference_sst: an estimate of the error resulting from the adjustment procedure. If the procedure consists of analysing a field of differences of original SST and reference SST, the standard_deviation_to_reference_sst will be the error of this analysis.

The GHRSST Science Team determined that 5 mandatory fields will form the core data content of a GHRSST L3 data file. In addition to global attributes and geo-location information, GHRSST producers must provide the following within a L3 file:

  • Sea Surface temperature data (SST),

  • Time of SST measurement,

  • Bias and Standard Deviation error estimates for SST data,

  • Data quality.

There are a number of optional fields that may be used at the data provider’s discretion that will form the core data content of a GHRSST data file (Table 8.2).

The GHRSST L3 file contents are summarized in Table 8.1 below.

Table 8.1 Summary description of the contents within a GHRSST L3 data product#

netCDF File Contents

Description

Coordinate variables

Information to permit locating data on grids, as defined in Section 6

L2P Data record variables

Core and auxiliary variables as defined in Section 7.2

L3 Data record variables

Special Level 3 variables as defined in Table 8.2

Global Attributes

A collection of required global attributes describing general characteristics of the file, as defined in section Section 5.2

8.2. L3 data record format specification#

This table provides an overview of the GHRSST L3 product pixel data record that should be created for each input data. Within GHRSST L3 data files, there are many variables that are defined identically to their L2P counterparts. In addition, there are several variables that are unique to L3. Both types are listed below in Table 8.2. In the following sections, each variable within the L3 data file that is unique to L3 is described in detail.

Table 8.2 Summary description of GHRSST L2P data records#

Variable Name

Description

Units

Storage type

sea_surface_temperature

SST measurement values from input L2 satellite data set.

K (kelvin)

short

sst_dtime

The deviation in time of SST measurement from reference time

s (second)

short

sses_bias

Sensor Specific Error Statistic (SSES) bias error

K (kelvin)

byte

sses_standard_deviation

Sensor Specific Error Statistic (SSES) standard deviation uncertainty

K (kelvin)

byte

dt_analysis

The difference between input SST and a GHRSST L4 SST analysis from the previous 24 hour period

K (kelvin)

byte or short

wind_speed

Closest (in time) 10 m surface wind speed from satellite or analysis

m s-1

byte

wind_speed_dtime_from_sst

Time difference of wind_speed data from input L2 SST measurement specified in hours.

h (hour)

byte

source_of_wind_speed

Source(s) of wind_speed data. Mandatory when multiple sources used.

Code

byte

sea_ice_fraction

Closest (in time) sea ice fraction from satellite or analysis

1

byte

sea_ice_fraction_dtime_from_sst

Time difference of sea_ice_fraction data from input L2 SST measurement specified in hours

h (hour)

byte

source_of_sea_ice_fraction

Source(s) of sea_ice_fraction data

code

byte

aerosol_dynamic_indicator

Atmospheric aerosol indicator

byte

adi_dtime_from_sst

Time difference between the aerosol_dynamic_indicator value and SST measurement

h (hour)

byte

source_of_adi

Source(s) of atmospheric aerosol indicator data

code

byte

l2p_flags

Data flag values

mask of bits

short

quality_level

Overall indication of L2P data quality

enum

byte

satellite_zenith_angle

Calculated satellite zenith angle (measured at the Earth’s surface between the satellite and the zenith)

degree

byte

solar_zenith_angle

Calculated solar zenith angle (the angle between the local zenith and the line of sight to the sun, measured at the Earth’s surface)

degree

byte

surface_solar_irradiance

Near contemporaneous surface solar irradiance

W m-2

byte

ssi_dtime_from_sst

Time difference between the surface_solar_irradiance value and SST measurement in hours

h (hour)

byte

source_of_ssi

Source(s) of surface_solar_irradiance data

code

byte

or_latitude

Original latitude of the satellite measurement as provided in the L2P

degree_north

short or float

or_longitude

Original longitude of the satellite measurement as provided in the L2P

degree_east

short or float

or_number_of_pixels

Number of original pixels from the L2P contributing to the binned (space and/or time) average

1 (unitless)

short

sum_sst

Sum of the pixel values going into the space and/or time bin

K (kelvin)

float

sum_square_sst

Sum of the pixel value squares going into the space and/or time bin

K2 (kelvin^2)

float

adjusted_sea_surface_temperature

SST adjusted to the reference. Mandatory for adjusted type file

K (kelvin)

short

adjusted_standard_deviation_error

Total error standard deviation estimate derived from SSES and adjustment method. Mandatory for adjusted type file

K (kelvin)

byte

bias_to_reference_sst

Bias error derived from comparison with the reference. Mandatory for adjusted type file

K (kelvin)

short

standard_deviation_to_reference_sst

Error standard deviation resulting from the bias estimation method. Mandatory for adjusted type file

K (kelvin)

byte

source_of_sst

Source of SST data. Mandatory for super-collated type file

code

byte

other fields

Optional/experimental fields defined by data provider

8.2.1. or_latitude#

Optional.

This variable is the original latitude of the contributing pixel in case of remapping to the nearest pixel, or the average latitude of the contributing pixels in case of averaging.

The variable or_latitude will be included either as a floating point variable similarly to the grid latitude and longitude, or as a short variable, with the format requirements shown in Table 8.3, if the required precision is compatible.

Table 8.3 CDL example description of or_latitude variable#

Storage type

Name

Description

Unit

short or float

or_latitude

Original latitude of the satellite measurement

degree_north

short or_latitude(time, lat, lon) ;
	or_latitude:_FillValue = -32768s ;
	or_latitude:long_name = "original latitude of the SST value" ;
	or_latitude:standard_name = "latitude" ;
	or_latitude:units = "degree_north" ;
	or_latitude:coverage_content_type = "coordinate" ;
	or_latitude:authority = "CF-1.11, ACDD-1.3" ;
	or_latitude:add_offset = 0. ;
	or_latitude:scale_factor = 0.01 ;

8.2.2. or_longitude#

Optional.

This variable is the original longitude of the contributing pixel in case of remapping to the nearest pixel, or the average longitude of the contributing pixels in case of averaging.

The variable or_longitude shall be included either as a floating point variable similarly to the grid latitude and longitude, or as a short variable, with the format requirements shown in Table 8.4, if the required precision is compatible.

Table 8.4 CDL example description of or_longitude variable#

Storage type

Name

Description

Unit

short or float

or_longitude

Original longitude of the satellite measurement

degree_east

short or_longitude(time, lat, lon) ;
	or_longitude:_FillValue = -32768s ;
	or_longitude:long_name = "original longitude of the SST value" ;
	or_longitude:standard_name = "longitude" ;
	or_longitude:units = "degree_east" ;
	or_longitude:coverage_content_type = "coordinate" ;
	or_longitude:authority = "CF-1.11, ACDD-1.3" ;
	or_longitude:add_offset = 0. ;
	or_longitude:scale_factor = 0.01 ;

8.2.3. or_number_of_pixels#

Mandatory.

This variable is the number of original pixels from the L2P contributing to the binned (space and/or time) average.

The variable or_number_of_pixels shall be included with the format requirements shown in Table 8.5.

Table 8.5 CDL example description of or_number_of_pixels variable#

Storage type

Name

Description

Unit

short

or_number_of_pixels

Number of pixels from the L2P contributing to the SST value

“1” (unitless)

short or_number_of_pixels(time, lat, lon) ;
	or_number_of_pixels:_FillValue = -32768s ;
	or_number_of_pixels:long_name = "original number of pixels from the L2Ps contributing to the SST value" ;
	or_number_of_pixels:units = "1" ;
	or_number_of_pixels:standard_name = "sea_surface_foundation_temperature number_of_observations" ;
	or_number_of_pixels:coverage_content_type = "referenceInformation" ;

8.2.4. sum_sst#

Optional.

This variable is the sum of the original SST pixel values contributing to the binned (space and/or time) average.

The variable sum_sst shall be included with the format requirements shown in Table 8.6.

Table 8.6 CDL example description of sum_sst variable#

Storage type

Name

Description

Unit

short

sum_sst

Sum of the pixel values going into the space and/or time bin

K (kelvin)

float sum_sst(time, lat, lon) ;
	sum_sst:_FillValue = 1.e+20f ;
	sum_sst:long_name = "Sum of original contributing pixel sst values" ;
	sum_sst:units = "K" ;
	sum_sst:coverage_content_type = "auxiliaryInformation" ;

8.2.5. sum_square_sst#

Optional.

This variable is the sum of the squares of the original SST pixel values contributing to the binned (space and/or time) average.

The variable sum_square_sst shall be included with the format requirements shown in Table 8.7.

Table 8.7 CDL example description of sum_square_sst variable#

Storage type

Name

Description

Unit

short

sum_square_sst

Sum of the pixel value squares going into the space and/or time bin

K2

float sum_square_sst(time, lat, lon) ;
	sum_square_sst:_FillValue = 1.e+20f ;
	sum_square_sst:long_name = "Sum of contributing pixel sst value squares" ;
	sum_square_sst:units = "K2" ;
	sum_square_sst:coverage_content_type = "auxiliaryInformation" ;

8.2.6. adjusted_sea_surface_temperature#

Mandatory for adjusted type files.

This variable is the SST adjusted to the reference. See the principles of the adjustment procedure in Section 8.4.3.

The variable adjusted_sea_surface_temperature shall be included with the format requirements shown in Table 8.8.

Table 8.8 CDL example description of adjusted_sea_surface_temperature variable#

Storage type

Name

Description

Unit

short

adjusted_sea_surface_temperature

SST values after adjustment to the reference

K (kelvin)

short adjusted_sea_surface_temperature(time, lat, lon) ;
	adjusted_sea_surface_temperature:_FillValue = -32768s ;
	adjusted_sea_surface_temperature:long_name = "adjusted foundation sea surface temperature" ;
	adjusted_sea_surface_temperature:units = "K" ;
	adjusted_sea_surface_temperature:standard_name = "sea_surface_foundation_temperature" ;
	adjusted_sea_surface_temperature:coverage_content_type = "physicalMeasurement" ;
	adjusted_sea_surface_temperature:binning_method = "mean" ;
	adjusted_sea_surface_temperature:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
	adjusted_sea_surface_temperature:valid_range = -300s, 4500s ;
	adjusted_sea_surface_temperature:comment = "The recommended SST variable to use in this product. The original observations were cross-calibrated using a multi-sensor reference field\"" ;
	adjusted_sea_surface_temperature:add_offset = 273.15 ;
	adjusted_sea_surface_temperature:scale_factor = 0.01 ;

8.2.7. adjusted_standard_deviation_error#

Mandatory for adjusted type files.

This variable represents the total error associated with the adjusted_sea_surface_temperature variable. It represents the accumulated error of the SST production (the sses_standard_deviation) and the SST adjustment (standard_deviation_to_reference_sst).

The variable adjusted_standard_deviation_error shall be included with the format requirements shown in Table 8.9.

Table 8.9 CDL example description of adjusted_standard_deviation_error variable#

Storage type

Name

Description

Unit

byte

adjusted_standard_deviation_error

Total error standard deviation estimate derived from SSES and adjustment method

K (kelvin)

byte adjusted_standard_deviation_error(time, lat, lon) ;
	adjusted_standard_deviation_error:_FillValue = -128b ;
	adjusted_standard_deviation_error:long_name = "standard deviation error based on L2P SSES and adjustment method" ;
	adjusted_standard_deviation_error:units = "K" ;
	adjusted_standard_deviation_error:coverage_content_type = "qualityInformation" ;
	adjusted_standard_deviation_error:comment = "Cumulated errors of SSES and adjustment method" ;
	adjusted_standard_deviation_error:scale_factor = 0.01 ;
	adjusted_standard_deviation_error:add_offset = 1. ;

8.2.8. bias_to_reference_sst#

Mandatory for adjusted type files.

This quantity represents the local value of the adjustment to the reference.

The variable bias_to_reference_sst shall be included with the format requirements shown in Table 8.10.

Table 8.10 CDL example description of bias_to_reference_sst variable#

Storage type

Name

Description

Unit

byte

bias_to_reference_sst

Bias error derived from comparison with the reference

K (kelvin)

short bias_to_reference_sst(time, lat, lon) ;
	bias_to_reference_sst:_FillValue = -32768s ;
	bias_to_reference_sst:long_name = "bias error derived from reference" ;
	bias_to_reference_sst:units = "K" ;
	bias_to_reference_sst:comment = "Bias estimate derived from comparison between the original SST (native SSES being applied) and the reference sensor SST (original SST - reference SST)" ;
	bias_to_reference_sst:coverage_content_type = "qualityInformation" ;
	bias_to_reference_sst:add_offset = 0. ;
	bias_to_reference_sst:scale_factor = 0.01 ;

8.2.9. standard_deviation_to_reference_sst#

Mandatory for adjusted type files.

This quantity represents the local error standard deviation resulting from the bias estimation method.

The variable standard_deviation_to_reference_sst shall be included with the format requirements shown in Table 8.11.

Table 8.11 CDL example description of standard_deviation_to_reference_sst variable#

Storage type

Name

Description

Unit

short

standard_deviation_to_reference_sst

Error standard deviation resulting from the bias estimation method

K (kelvin)

byte standard_deviation_to_reference_sst(time, lat, lon) ;
	standard_deviation_to_reference_sst:_FillValue = -128b ;
	standard_deviation_to_reference_sst:long_name = "standard deviation of the reference error" ;
	standard_deviation_to_reference_sst:units = "K" ;
	standard_deviation_to_reference_sst:coverage_content_type = "qualityInformation" ;
	standard_deviation_to_reference_sst:comment = "This represents the error standard deviation estimate resulting from the bias estimation method" ;
	standard_deviation_to_reference_sst:scale_factor = 0.01 ;
	standard_deviation_to_reference_sst:add_offset = 1. ;

8.2.10. source_of_sst#

Mandatory and only applicable to super-collated (L3S) type files.

This variable represents the source(s) of SST data when merging the values from different input datasets.

When only one source is used, this variable is not needed and the appropriate text string indicating the source is placed in the source attribute of the sea_surface_temperature variable.

For multiple sources, the GDS-2.2r0 requires the following:

  • The variable in question should contain an attribute called flag_meanings and another one called flag_values. The flag_values attribute shall contain a comma-separated list of the numeric codes for the sources of data used whose order matches the comma-separated text strings in the flag_meanings attribute.

  • These text strings and numeric codes do not need to be unique across different data sets or even ancillary variables, but must be consistent within a given variable and clearly specified within each netCDF variable and its attributes. A best practice for naming the text strings in provided in
    Section 4.9.

In a super-collated file (L3S), the variable source_of_sst shall be included with the format requirements shown in Table 8.12.

Table 8.12 CDL example description of source_of_sst variable#

Storage type

Name

Description

Unit

byte

source_of_sst

Origin of the SST at pixel level

code

byte source_of_sst(time, lat, lon) ;
	source_of_sst:flag_values = 0b, 20b, 21b, 70b, 72b, 80b, 81b, 53b, 41b, 52b, 42b, 85b, 60b ;
	source_of_sst:flag_meanings = "no_data VIIRS_NPP-STAR-L2P-v2.80 VIIRS_N20-STAR-L2P-v2.80 AVHRR_SST_METOP_B-OSISAF-L2P-v1.0 AVHRR_SST_METOP_C-OSISAF-L2P-v1.0 SLSTRA-MAR-L2P-v1.0 SLSTRB-MAR-L2P-v1.0 ABI_G18-STAR-L3C-v2.90 SEVIRI_SST-OSISAF-L3C-v1.0 GOES16-OSISAF-L3C-v1.0 SEVIRI_IO_SST-OSISAF-L3C-v1.0 AHI_H09-STAR-L3C-v2.9 AMSR2-REMSS-L2P-v8.2" ;
	source_of_sst:long_name = "source of sea surface temperature measurement" ;
	source_of_sst:coverage_content_type = "referenceInformation" ;

8.3. Sample GHRSST L3 file (CDL header)#

A complete CDL description of a L3S dataset is given below.

netcdf \20240101000000-IFR-L3S_GHRSST-SSTfnd-ODYSSEA-GLOB_010-v02.2-fv01.0 {
dimensions:
	lat = 1600 ;
	lon = 3600 ;
	time = 1 ;
variables:
	float lat(lat) ;
		lat:_FillValue = NaNf ;
		lat:standard_name = "latitude" ;
		lat:units = "degrees_north" ;
		lat:axis = "Y" ;
		lat:long_name = "latitude" ;
		lat:authority = "CF-1.11, ACDD-1.3" ;
		lat:valid_range = -90.f, 90.f ;
		lat:comment = "geographical coordinates, WGS84 projection" ;
		lat:coverage_content_type = "coordinate" ;
	float lon(lon) ;
		lon:_FillValue = NaNf ;
		lon:standard_name = "longitude" ;
		lon:units = "degrees_east" ;
		lon:axis = "X" ;
		lon:long_name = "longitude" ;
		lon:authority = "CF-1.11, ACDD-1.3" ;
		lon:valid_range = -180.f, 180.f ;
		lon:comment = "geographical coordinates, WGS84 projection" ;
		lon:coverage_content_type = "coordinate" ;
	int64 crs ;
		crs:grid_mapping_name = "latitude_longitude" ;
		crs:longitude_of_prime_meridian = 0. ;
		crs:semi_major_axis = 6378137. ;
		crs:inverse_flattening = 298.257223563 ;
	short sea_surface_temperature(time, lat, lon) ;
		sea_surface_temperature:_FillValue = -32768s ;
		sea_surface_temperature:long_name = "sea surface foundation temperature" ;
		sea_surface_temperature:units = "K" ;
		sea_surface_temperature:standard_name = "sea_surface_foundation_temperature" ;
		sea_surface_temperature:coverage_content_type = "physicalMeasurement" ;
		sea_surface_temperature:binning_method = "mean" ;
		sea_surface_temperature:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		sea_surface_temperature:valid_range = -300s, 4500s ;
		sea_surface_temperature:add_offset = 273.15 ;
		sea_surface_temperature:scale_factor = 0.01 ;
	short or_number_of_pixels(time, lat, lon) ;
		or_number_of_pixels:_FillValue = -32768s ;
		or_number_of_pixels:long_name = "original number of pixels from the L2Ps contributing to the SST value" ;
		or_number_of_pixels:units = "1" ;
		or_number_of_pixels:standard_name = "sea_surface_foundation_temperature number_of_observations" ;
		or_number_of_pixels:coverage_content_type = "referenceInformation" ;
	byte sea_surface_temperature_stddev(time, lat, lon) ;
		sea_surface_temperature_stddev:_FillValue = -128b ;
		sea_surface_temperature_stddev:long_name = "sea_surface_subskin_temperature" ;
		sea_surface_temperature_stddev:units = "kelvin" ;
		sea_surface_temperature_stddev:standard_name = "sea_surface_subskin_temperature" ;
		sea_surface_temperature_stddev:coverage_content_type = "physicalMeasurement" ;
		sea_surface_temperature_stddev:binning_method = "std" ;
		sea_surface_temperature_stddev:cell_methods = "lat: lon: standard_deviation (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		sea_surface_temperature_stddev:add_offset = 2.54 ;
		sea_surface_temperature_stddev:scale_factor = 0.02 ;
	byte quality_level(time, lat, lon) ;
		quality_level:_FillValue = -128b ;
		quality_level:flag_meanings = "no_data bad_data worst_quality low_quality acceptable_quality best_quality" ;
		quality_level:flag_values = 0LL, 1LL, 2LL, 3LL, 4LL, 5LL ;
		quality_level:long_name = "quality level of SST pixel" ;
		quality_level:coverage_content_type = "qualityInformation" ;
		quality_level:binning_method = "mean" ;
		quality_level:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		quality_level:valid_range = 0b, 5b ;
		quality_level:standard_name = "sea_surface_foundation_temperature status_flag" ;
		quality_level:comment = "These are the overall quality indicators and are used for all GHRSST SSTs" ;
	byte sses_bias(time, lat, lon) ;
		sses_bias:_FillValue = -128b ;
		sses_bias:long_name = "SSES bias estimate" ;
		sses_bias:units = "K" ;
		sses_bias:coverage_content_type = "qualityInformation" ;
		sses_bias:binning_method = "mean" ;
		sses_bias:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		sses_bias:valid_range = -127b, 127b ;
		sses_bias:comment = "Bias estimate derived using the techniques described at http://www.ghrsst.org/SSES-Description-of-schemes.html" ;
		sses_bias:add_offset = 0. ;
		sses_bias:scale_factor = 0.02 ;
	byte sses_standard_deviation(time, lat, lon) ;
		sses_standard_deviation:_FillValue = -128b ;
		sses_standard_deviation:long_name = "SSES standard deviation" ;
		sses_standard_deviation:units = "kelvin" ;
		sses_standard_deviation:coverage_content_type = "qualityInformation" ;
		sses_standard_deviation:binning_method = "mean" ;
		sses_standard_deviation:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		sses_standard_deviation:valid_range = -127b, 127b ;
		sses_standard_deviation:comment = "Standard deviation estimate derived using the techniques described at http://www.ghrsst.org/SSES-Description-of-schemes.html" ;
		sses_standard_deviation:add_offset = 2.54 ;
		sses_standard_deviation:scale_factor = 0.02 ;
	byte satellite_zenith_angle(time, lat, lon) ;
		satellite_zenith_angle:_FillValue = -128b ;
		satellite_zenith_angle:long_name = "satellite zenith angle" ;
		satellite_zenith_angle:units = "angular_degree" ;
		satellite_zenith_angle:coverage_content_type = "referenceInformation" ;
		satellite_zenith_angle:binning_method = "mean" ;
		satellite_zenith_angle:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		satellite_zenith_angle:standard_name = "platform_zenith_angle" ;
		satellite_zenith_angle:comment = "the satellite zenith angle at the time of the SST observations" ;
		satellite_zenith_angle:add_offset = 0. ;
		satellite_zenith_angle:scale_factor = 1. ;
	short or_latitude(time, lat, lon) ;
		or_latitude:_FillValue = -32768s ;
		or_latitude:long_name = "original latitude of the SST value" ;
		or_latitude:standard_name = "latitude" ;
		or_latitude:units = "degree_north" ;
		or_latitude:coverage_content_type = "coordinate" ;
		or_latitude:authority = "CF-1.11, ACDD-1.3" ;
		or_latitude:add_offset = 0. ;
		or_latitude:scale_factor = 0.01 ;
	short or_longitude(time, lat, lon) ;
		or_longitude:_FillValue = -32768s ;
		or_longitude:long_name = "original longitude of the SST value" ;
		or_longitude:standard_name = "longitude" ;
		or_longitude:units = "degree_east" ;
		or_longitude:coverage_content_type = "coordinate" ;
		or_longitude:authority = "CF-1.11, ACDD-1.3" ;
		or_longitude:add_offset = 0. ;
		or_longitude:scale_factor = 0.01 ;
	short adjusted_sea_surface_temperature(time, lat, lon) ;
		adjusted_sea_surface_temperature:_FillValue = -32768s ;
		adjusted_sea_surface_temperature:long_name = "adjusted foundation sea surface temperature" ;
		adjusted_sea_surface_temperature:units = "K" ;
		adjusted_sea_surface_temperature:standard_name = "sea_surface_foundation_temperature" ;
		adjusted_sea_surface_temperature:coverage_content_type = "physicalMeasurement" ;
		adjusted_sea_surface_temperature:binning_method = "mean" ;
		adjusted_sea_surface_temperature:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		adjusted_sea_surface_temperature:valid_range = -300s, 4500s ;
		adjusted_sea_surface_temperature:comment = "The recommended SST variable to use in this product. The original observations were cross-calibrated using a multi-sensor reference field\"" ;
		adjusted_sea_surface_temperature:add_offset = 273.15 ;
		adjusted_sea_surface_temperature:scale_factor = 0.01 ;
	byte solar_zenith_angle(time, lat, lon) ;
		solar_zenith_angle:_FillValue = -128b ;
		solar_zenith_angle:long_name = "solar zenith angle" ;
		solar_zenith_angle:units = "angular_degree" ;
		solar_zenith_angle:standard_name = "solar_zenith_angle" ;
		solar_zenith_angle:binning_method = "mean" ;
		solar_zenith_angle:cell_methods = "lat: lon: mean (interval: 0.1 degree_N interval: 0.1 degree_E)" ;
		solar_zenith_angle:coverage_content_type = "referenceInformation" ;
		solar_zenith_angle:comment = "the solar zenith angle at the time of the SST observations" ;
		solar_zenith_angle:add_offset = 90. ;
		solar_zenith_angle:scale_factor = 1. ;
	short bias_to_reference_sst(time, lat, lon) ;
		bias_to_reference_sst:_FillValue = -32768s ;
		bias_to_reference_sst:long_name = "bias error derived from reference" ;
		bias_to_reference_sst:units = "K" ;
		bias_to_reference_sst:comment = "Bias estimate derived from comparison between the original SST (native SSES being applied) and the reference sensor SST (original SST - reference SST)" ;
		bias_to_reference_sst:coverage_content_type = "qualityInformation" ;
		bias_to_reference_sst:add_offset = 0. ;
		bias_to_reference_sst:scale_factor = 0.01 ;
	int sst_dtime(time, lat, lon) ;
		sst_dtime:_FillValue = -2147483648 ;
		sst_dtime:long_name = "time difference from reference time" ;
		sst_dtime:comment = "time plus sst_dtime gives each measurement time" ;
		sst_dtime:units = "second" ;
		sst_dtime:coverage_content_type = "coordinate" ;
	double time(time) ;
		time:_FillValue = 1.e+20 ;
		time:axis = "T" ;
		time:long_name = "reference time of sst file" ;
		time:standard_name = "time" ;
		time:authority = "CF-1.11, ACDD-1.3" ;
		time:coverage_content_type = "coordinate" ;
		time:units = "seconds since 1981-01-01" ;
		time:calendar = "proleptic_gregorian" ;
	byte source_of_sst(time, lat, lon) ;
		source_of_sst:flag_values = 0b, 20b, 21b, 70b, 72b, 80b, 81b, 53b, 41b, 52b, 42b, 85b, 60b ;
		source_of_sst:flag_meanings = "no_data VIIRS_NPP-STAR-L2P-v2.80 VIIRS_N20-STAR-L2P-v2.80 AVHRR_SST_METOP_B-OSISAF-L2P-v1.0 AVHRR_SST_METOP_C-OSISAF-L2P-v1.0 SLSTRA-MAR-L2P-v1.0 SLSTRB-MAR-L2P-v1.0 ABI_G18-STAR-L3C-v2.90 SEVIRI_SST-OSISAF-L3C-v1.0 GOES16-OSISAF-L3C-v1.0 SEVIRI_IO_SST-OSISAF-L3C-v1.0 AHI_H09-STAR-L3C-v2.9 AMSR2-REMSS-L2P-v8.2" ;
		source_of_sst:long_name = "source of sea surface temperature measurement" ;
		source_of_sst:coverage_content_type = "referenceInformation" ;
	float sum_sst(time, lat, lon) ;
		sum_sst:_FillValue = 1.e+20f ;
		sum_sst:long_name = "Sum of original contributing pixel sst values" ;
		sum_sst:units = "K" ;
		sum_sst:coverage_content_type = "auxiliaryInformation" ;
	float sum_square_sst(time, lat, lon) ;
		sum_square_sst:_FillValue = 1.e+20f ;
		sum_square_sst:long_name = "Sum of contributing pixel sst value squares" ;
		sum_square_sst:units = "K2" ;
		sum_square_sst:coverage_content_type = "auxiliaryInformation" ;
	byte adjusted_standard_deviation_error(time, lat, lon) ;
		adjusted_standard_deviation_error:_FillValue = -128b ;
		adjusted_standard_deviation_error:long_name = "standard deviation error based on L2P SSES and adjustment method" ;
		adjusted_standard_deviation_error:units = "K" ;
		adjusted_standard_deviation_error:coverage_content_type = "qualityInformation" ;
		adjusted_standard_deviation_error:comment = "Cumulated errors of SSES and adjustment method" ;
		adjusted_standard_deviation_error:scale_factor = 0.01 ;
		adjusted_standard_deviation_error:add_offset = 1. ;
	byte standard_deviation_to_reference_sst(time, lat, lon) ;
		standard_deviation_to_reference_sst:_FillValue = -128b ;
		standard_deviation_to_reference_sst:long_name = "standard deviation of the reference error" ;
		standard_deviation_to_reference_sst:units = "K" ;
		standard_deviation_to_reference_sst:coverage_content_type = "qualityInformation" ;
		standard_deviation_to_reference_sst:comment = "This represents the error standard deviation estimate resulting from the bias estimation method" ;
		standard_deviation_to_reference_sst:scale_factor = 0.01 ;
		standard_deviation_to_reference_sst:add_offset = 1. ;

// global attributes:
		:file_quality_level = 3LL ;
		:title = "ODYSSEA Global Sea Surface Temperature Gridded Level 3S Daily Multi-Sensor Observations" ;
		:id = "ODYSSEA-IFR-L3S-GLO_010-v3" ;
		:cmems_product_id = "SST_GLO_SST_L3S_NRT_OBSERVATIONS_010_010" ;
		:reference = "Product User Manual for L3S Odyssea Product over the Global Ocean, v2.1, Nov 2023, https://catalogue.marine.copernicus.eu/documents/PUM/CMEMS-SST-PUM-010-010.pdf" ;
		:summary = "This dataset provide a times series of daily multi-sensor composite fields of Sea Surface Temperature (SST) foundation at high resolution (HR) on a 0.10 x 0.10 degree grid (approximately 10 x 10 km) for the Global ocean, every 24 hours. It is produced for the Copernicus Marine Service." ;
		:metadata_link = "https://resources.marine.copernicus.eu/product-detail/SST_GLO_SST_L3S_NRT_OBSERVATIONS_010_010/INFORMATION" ;
		:date_metadata_modified = "2023-11-01T00:00:00Z" ;
		:doi = "https://doi.org/10.48670/moi-00164" ;
		:processing_level = "L3S" ;
		:publisher_institution = "Ifremer" ;
		:publisher_name = "Copernicus Marine Service" ;
		:publisher_url = "https://marine.copernicus.eu" ;
		:product_version = "1.0" ;
		:geospatial_bounds = "POLYGON ((-180.0 -80.0, 180.0 -80.0, 180.0 80.0, -180.0 80.0, -180.0 -80.0))" ;
		:geospatial_lat_max = 80. ;
		:geospatial_lat_min = -80. ;
		:geospatial_lon_max = 180. ;
		:geospatial_lon_min = -180. ;
		:spatial_resolution = "0.10 degree" ;
		:geospatial_lat_resolution = 0.1 ;
		:geospatial_lon_resolution = 0.1 ;
		:geospatial_bounds_crs = "EPSG:4326" ;
		:cdm_data_type = "grid" ;
		:time_coverage_start = "2023-12-31T12:00:00Z" ;
		:time_coverage_end = "2024-01-01T12:00:00Z" ;
		string :platform = "NPP", "NOAA-20", "Metop-B", "Metop-C", "Sentinel-3A", "Sentinel-3B", "GOES-18", "Meteosat-10", "GOES-16", "Meteosat-9", "Himawari-9", "GCOM-W" ;
		string :platform_type = "polar_orbiter", "polar_orbiter", "polar_orbiter", "polar_orbiter", "polar_orbiter", "polar_orbiter", "geostationary", "geostationary", "geostationary", "geostationary", "geostationary", "polar_orbiter" ;
		string :instrument = "VIIRS", "VIIRS", "AVHRR/3", "AVHRR/3", "SLSTR", "SLSTR", "ABI", "SEVIRI", "ABI", "SEVIRI", "AHI", "AMSR-2" ;
		string :instrument_type = "radiometer", "radiometer", "radiometer", "radiometer", "radiometer", "radiometer", "radiometer", "radiometer", "radiometer", "radiometer", "radiometer", "radiometer" ;
		string :band = "infrared", "infrared", "infrared", "infrared", "infrared", "infrared", "infrared", "infrared", "infrared", "infrared", "infrared", "microwave" ;
		:uuid = "a5f14cfc-b38f-11ee-88ca-0cc47a3fe28f" ;
		:date_created = "2024-01-15T10:20:04Z" ;
		:date_modified = "2024-01-15T10:20:04Z" ;
		:date_issued = "2024-01-15T10:20:04Z" ;
		:netcdf_version_id = "4.9.2 of Sep  1 2023 15:18:59 $" ;
		:keywords = "Oceans > Ocean Temperature > Sea Surface Temperature" ;
		:acknowledgment = "Please acknowledge the use of these data with the following statement: this dataset is produced by the Centre de Recherche et d\'Exploitation Satellitaire (CERSAT), at Ifremer, Plouzane (France): It is funded and distributed by Copernicus Marine Service" ;
		:Conventions = "CF-1.7, ACDD-1.3, ISO 8601" ;
		:standard_name_vocabulary = "Climate and Forecast (CF) Standard Name Table v79" ;
		:naming_authority = "org.ghrsst" ;
		:Metadata_Conventions = "Climate and Forecast (CF) 1.7, Attribute Convention for Data Discovery (ACDD) 1.3" ;
		:keywords_vocabulary = "NASA Global Change Master Directory (GCMD) Science Keywords" ;
		:format_version = "GHRSST GDS v2.1" ;
		:gds_version_id = "2.1" ;
		:platform_vocabulary = "CEOS mission table" ;
		:instrument_vocabulary = "CEOS instrument table" ;
		:institution = "Institut Francais de Recherche pour l\'Exploitation de la mer / Centre d\'Exploitation et de Recherche Satellitaire" ;
		:institution_abbreviation = "Ifremer / CERSAT" ;
		:project = "Group for High Resolution Sea Surface Temperature (GHRSST), Copernicus Marine Service (CMEMS)" ;
		:program = "Copernicus" ;
		:license = "These data are available free of charge under the CMEMS data policy, refer to http://marine.copernicus.eu/services-portfolio/service-commitments-and-licence/" ;
		:creator_name = "CERSAT" ;
		:creator_url = "http://cersat.ifremer.fr" ;
		:creator_email = "cersat@ifremer.fr" ;
		:creator_type = "institution" ;
		:creator_institution = "Ifremer" ;
		:contributor_name = "Jean-Francois Piolle, Emmanuelle Autret" ;
		:contributor_role = "principal investigator" ;
		:contact = "emmanuelle.autret@ifremer.fr;jfpiolle@ifremer.fr" ;
		:technical_support_contact = "cersat@ifremer.fr" ;
		:scientific_support_contact = "emmanuelle.autret@ifremer.fr;jfpiolle@ifremer.fr" ;
		:processing_software = "Telemachus 3.1.2" ;
		:source = "ODYSSEA" ;
		:source_version = "3.0.2" ;
		:history = "file originally produced by Ifremer/CERSAT with ODYSSEA system 3.0.2" ;
		:geospatial_bounds_vertical_crs = "EPSG:5831" ;
		:geospatial_lat_units = "degrees_north" ;
		:geospatial_lon_units = "degrees_east" ;
		:geospatial_vertical_min = 0. ;
		:geospatial_vertical_max = 0. ;
		:temporal_resolution = "daily" ;
		:time_coverage_resolution = "P1D" ;
		:time_coverage_duration = "P1D" ;
		:publisher_email = "cersat@ifremer.fr" ;
		:publisher_type = "institution" ;
}

8.4. Best Practices#

8.4.1. Remapping Level 2 Data to a Fixed Grid#

The remapping procedure consists in remapping the original L2P in swath projection onto a fixed grid. This remapping should preserve the traceability of the SST at pixel level and keep the best quality data.

If the original and final grid resolutions are similar, the nearest pixel remapping should be adopted. To do so, either a “source to target” or a “target to source” approach may be used. The latter, target to source, which consists in scanning the target grid points to find the nearest pixel in the source, is recommended since it avoids creating holes in the remapped field.

If the original grid resolution is finer than the output grid, as illustrated in Fig. 8.1, an averaging procedure can be adopted. For these cases the best practice is to average the values of all pixels which overlap the product cell entirely and which have a L2P confidence record quality_level value equal to the highest encountered within the cell, to produce a single value.

_images/regridding1.png

Fig. 8.1 To illustrate the approach when the L3 product output grid is over-sampled by the L2P input data. All pixels labeled p in the input data are possible contributors to the value for new cell A.#

The following practices are recommended by the GDS:

  1. In the case of a smaller L2P input pixel than the grid cell size, L3 data product cell values are derived from an average of the L2P pixel which completely overlap the product cell and which have a L2P quality record quality_level value equal to the highest encountered within the cell, to produce a single value.

  2. For input pixels that straddle the boundary between output grid cells, a
    weighting function may be applied to the input values according to the degree of coverage of the output grid cell and according to the SSES.

  3. Only the best quality original data within a grid cell should be averaged to produce the resulting SST value, to preserve the homogeneity of the SST quality (recommendation 1 above). In the case of averaging, the number of contributors can be recorded as well as the sum of the SST values and the sum of the square values of the SST. The SSES and ancillary data (if needed, for instance if there may be more that one SSES couple of values (bias and standard deviation) by quality level) must be averaged accordingly: the sses_bias values are averaged similarly as the SST values, the new sses_standard_deviation value is the square root of the averaged squared values of the contributing sses_standard_deviations. The averaging should account for the nature of the original l2P_flags.

  4. In the case of a larger pixel than the L3 grid cell size, 2 approaches can be adopted:

    • The value of the L2P pixel is allocated to the grid cell the closest to the pixel centre.

    • The output grid cell takes the value of the L2P pixel in which its centre lies. In this case the original latitudes and longitudes of the pixel must be recorded, to be able to detect where the original L2P pixel value has been duplicated.

If the original grid resolution is larger than the output grid (e.g., microwave instruments), as illustrated in Fig. 8.2, the following practices are recommended by the GDS:

_images/regridding2.png

Fig. 8.2 To illustrate the approach when the L3 output grid is under-sampled by the L2P data. Either Grid cell C is assigned the value of pixel p, Or grid cell A is assigned the value of pixel p and grid cell B is assigned the weighted average of p and q provided they both have quality flags with the same rating.#

8.4.2. Collating Data from the Same Sensor and Platform#

The collating procedure consists of gathering over a unique grid several orbits or slots (in the case of a geostationary satellite) of the same sensor on the same platform. This process is often known as “binning” the data. The collating procedure merges data with different times of observation.

  1. For situations in which the collation is to be done for data collected within the same day, two cases are met in practice: collation of consecutive orbits in the case of data collected from polar orbiting sensors, or the merging of consecutive slots in the case of geostationary satellites. In both cases there may be multiple candidates for a grid cell.

    1. To collate observations from overlapping orbits of the polar orbiting sensors, the selection procedure should prioritize data first by using the highest available quality data. If multiple observations share the same highest quality, one of two approaches should be taken: either the observation with the minimum satellite zenith angle should be selected, or the observations should be averaged. If the minimum satellite zenith angle approach is taken, the corresponding sses_bias and sses_standard_deviation should be selected as well. If the averaging approach is followed, the sses_bias and sses_standard_deviation should be averaged similarly (note that the new sses_standard_deviation value is the square root of the averaged squared values of the contributing sses_standard_deviation values). Also in the case of averaging, it is good practice to record the number of observations being averaged, the sum of the SST values, and the sum of the squared SST values. These values can be stored in the or_number_pixels, sum_sst, and sum_square_sst variables listed in Sections and 8 and 9.

    2. In the case of geostationary data, the selection procedure must prioritize data showing the best quality level, and if equal, data closest to the representative time (central time) of the L3 time window. In the case of geostationary satellites, remapping is not a preliminary step to the collating procedure.

  2. If averaging over multiple days, only the best quality original data within a grid cell should be averaged to produce the resulting SST value, to preserve the homogeneity of the SST quality. The number of contributors can be recorded (or_number_pixels) as well as the sum of the SST values ( sum_sst) and the sum of the square values of the SST (sum_square_sst). The SSES values should be averaged accordingly: the sses_bias values are averaged in the same manner as the SST values and the new sses_standard_deviation value is the square root of the averaged squared values of the contributing sses_standard_deviation values. The averaging should preserve the nature of the original l2P_flags.

8.4.3. SST Adjustments#

Most of individual sensors show regional biases resulting in limitations of the applied algorithms. The objective of the adjustment procedure is to provide a correction to these regional biases by comparison with a “reference sensor”, supposedly free from such biases. A variety of sources can be adopted as references in the adjustment procedure, ranging from AATSR or in situ measurement to using a median of sensors approach. The adopted reference must be recorded in the adjusted_sea_surface_temperature variable “reference” attribute.

The adjustment procedure includes the following steps:

  1. application of the SSES,

  2. determination of the bias adjustment to the reference,

  3. evaluation of the error of the adjustment procedure

Note

A skin to subskin conversion may be needed. In that case, please refer to the STVAL recommendations. The type of the SST variables must be recorded in the standard_names of the sea_surface_temperature and adjusted_sea_surface_temperature variables. The bias adjustment value at pixel and the error of the adjustment procedure must be recorded in the corresponding variables (mandatory).

8.4.4. Super-Collating Data from Multiple Sensors and Platforms#

The building of a super-collated file is done by merging adjusted collated L3 files from various sensors over the same grid and over the same time window. There is one input candidate file (and hence one candidate observation) per sensor. There may be multiple candidates for a given grid cell originating from different sensors. To make the selection from among the candidates, a “decision tree” or selection hierarchy should be established beforehand. This hierarchy depends on the objective of the super-collation procedure, and may be quite different for a moderate resolution (10km) super-collated over 24h aiming to feed a foundation SST analysis and for a high resolution (2km) hourly subskin SST super-collated aiming to feed a diurnal warming analysis, for example. Because the hierarchy must be established based on the intended use of the super-collated dataset that results, it is out of the scope of this document to define any single hierarchy. However, the adopted hierarchy must be described in the comment attribute of the adjusted_sea_surface_temperature variable. In addition, it is mandatory to provide the source of the SST (source_of_sst) at the grid cell level.