Cloud-native access to NOAA Satellite Ocean Heat Content (OHC) products using Icechunk, providing analysis-ready access to the original NOAA data without duplicating the underlying files. https://www.ospo.noaa.gov/products/ocean/ohc/
Icechunk stores of the full NOAA CoastWatch Ocean Heat Content (OHC) Product Suite archive, spanning 2020 to present, for three regions:
Each region is a separate repository because the three regions use different lat/lon grids and cannot share a virtual Zarr array.
These repositories do not copy the science data. Icechunk stores only metadata and
byte-range references back to the original NetCDF/HDF5 files hosted at NOAA CoastWatch;
reads are streamed directly from coastwatch.noaa.gov over HTTP range requests
("virtual chunks"). See How to open it for the one extra step this
requires.
The notebooks that built these stores live in the GitHub repository
https://github.com/fish-pace/icechunks (directory coastwatch-heat-content/), and a
copy of each sits alongside this README on Source Cooperative:
They are provided to document how the archive was assembled and as a starting point for
anyone building something similar. The write notebooks import shared helpers from
icechunk_utils.py (included here); running them additionally requires Source Cooperative
write credentials, so for most readers they are read-along references.
The Satellite Ocean Heat Content Suite (produced by USDOC/NOAA/NESDIS/OSPO with the University of Miami/Rosenstiel School) blends altimeter sea-surface-height anomalies with GeoPolar blended SST and the SMARTS climatology to estimate upper-ocean heat content and related fields. It is widely used in hurricane-intensification analysis.
crs variable)Each region covers a different domain (e.g. the North Atlantic grid is 0°–60°N,
100°W–0°, 241 × 401). Open a repo and inspect its latitude/longitude coordinates for
the exact extent.
Coordinates are time, latitude (degrees_north), and longitude (degrees_east).
Missing data is represented as -999 in the source files. A CF missing_value
attribute has been added where the source omitted it, so xarray masks -999 to NaN
automatically on read — no manual masking needed.
Every region repo has the same three groups. They exist because the archive is not homogeneous, and a single virtual Zarr array cannot span files that differ in variable set or byte-level encoding:
daily vs. 14day* — these are two generations of the product (source dirs
{region} and {region}14) with different variable sets. The 14day* files add
the SST quality_flag variable (and 14day_v1 additionally carries a scalar
quality_information summary). Keeping them separate preserves each generation's
variables without forcing empty columns.14day_v1 vs. 14day — partway through 2025 the source files switched from
NetCDF-3 (big-endian) to HDF5 (little-endian). Because Icechunk stores a single
codec pipeline per array and references the original bytes, big-endian and
little-endian chunks cannot live in one virtual array. The split is at day-of-year
084/085 of 2025, verified identical for all three regions.Note on the overlap and gaps. The
dailyand14dayproducts overlap by a few days around January 2024 (both cover 2024-01-15…2024-01-18). A handful of source files with corrupt (all-zero) coordinates and data were dropped during construction, so a group may begin one day after its nominal codec boundary.
For a continuous single time series, open the groups separately and concatenate the shared variables at read time (see below).
Requires icechunk >= 2.1 and xarray. The science arrays live at CoastWatch, outside
these Icechunk stores, so you must authorize the virtual chunk container at open time —
this is the one non-standard step.
CoastWatch blocks the default python-requests User-Agent, but Icechunk sends its own
(icechunk-rust-x.y.z), so no custom headers are needed for reads.
Use chunks={} (dask-backed) as shown — with chunks=None the arrays are plain NumPy
and this concatenation eagerly materializes several GB into memory.
grid-mapping container (grid_mapping_name = latitude_longitude) |
| — |
quality_information | scalar retrieval-statistics summary | — (14day_v1 only) |