Source code for wavespectra.input.era5

"""Read ERA5 2D Wave Spectra NetCDF files"""
import numpy as np

from wavespectra.core.attributes import attrs, set_spec_attributes
from wavespectra.input.netcdf import read_netcdf


[docs] def read_era5(filename_or_fileglob, chunks={}, freqs=None, dirs=None): """Read Spectra from ECMWF ERA5 netCDF format. Args: - filename_or_fileglob (str, list, filelike): filename, fileglob specifying multiple files, or filelike object to read. - chunks (dict): chunk sizes for dimensions in dataset. By default dataset is loaded using single chunk for all dimensions (see xr.open_mfdataset documentation). - freqs (list): list of frequencies. By default use all 30 ERA5 frequencies. - dirs (list): list of directions. By default use all 24 ERA5 directions. Returns: - dset (SpecDataset): spectra dataset object read from netcdf file. Note: - If file is large to fit in memory, consider specifying chunks for 'time' and/or 'station' dims. """ default_freqs = np.full(30, 0.03453) * (1.1 ** np.arange(0, 30)) default_dirs = direction = (np.arange(7.5, 352.5 + 15, 15) + 180) % 360 dset = read_netcdf( filename_or_fileglob, specname="d2fd", freqname="frequency", dirname="direction", lonname="longitude", latname="latitude", timename="time", chunks=chunks, ) # Convert ERA5 format to wavespectra format dset = 10**dset * np.pi / 180 dset = dset.fillna(0) dset[attrs.FREQNAME] = freqs if freqs else default_freqs dset[attrs.DIRNAME] = dirs if dirs else default_dirs # Setting standard attributes set_spec_attributes(dset) return dset