Open jsbach echam grb files
Created by: aaronspring
I heard about the cfgrib lib which got implemented in xarray. But I don’t get it working. Workaround: cdo postprocessing
Activity
-
Newest first Oldest first
-
Show all activity Show comments only Show history only
- Author Owner
Created by: aaronspring
grb_ds = xr.open_dataset(grb_path, engine='cfgrib') Can't create file '/work/mh0727/m300524/experiments/GE/hist/hist0001/outdata/echam6/hist0001_echam6_BOT_mm_1999.grb.887f8.idx' Traceback (most recent call last): File "/work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/cfgrib/messages.py", line 305, in from_indexpath_or_filestream File "/work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/contextlib.py", line 81, in __enter__ return next(self.gen) File "/work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/cfgrib/messages.py", line 243, in compat_create_exclusive PermissionError: [Errno 13] Permission denied: '/work/mh0727/m300524/experiments/GE/hist/hist0001/outdata/echam6/hist0001_echam6_BOT_mm_1999.grb.887f8.idx' Can't read index file '/work/mh0727/m300524/experiments/GE/hist/hist0001/outdata/echam6/hist0001_echam6_BOT_mm_1999.grb.887f8.idx' Traceback (most recent call last): File "/work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/cfgrib/messages.py", line 315, in from_indexpath_or_filestream File "/work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/genericpath.py", line 55, in getmtime return os.stat(filename).st_mtime FileNotFoundError: [Errno 2] No such file or directory: '/work/mh0727/m300524/experiments/GE/hist/hist0001/outdata/echam6/hist0001_echam6_BOT_mm_1999.grb.887f8.idx' --------------------------------------------------------------------------- DatasetBuildError Traceback (most recent call last) <ipython-input-44-10bbce4c35e8> in <module> ----> 1 grb_ds = xr.open_dataset(grb_path, engine='cfgrib') /work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/xarray/backends/api.py in open_dataset(filename_or_obj, group, decode_cf, mask_and_scale, decode_times, autoclose, concat_characters, decode_coords, engine, chunks, lock, cache, drop_variables, backend_kwargs, use_cftime) /work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/xarray/backends/cfgrib_.py in __init__(self, filename, lock, **backend_kwargs) /work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/cfgrib/dataset.py in open_file(path, grib_errors, **kwargs) /work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/cfgrib/dataset.py in build_dataset_components(stream, indexpath, filter_by_keys, errors, encode_cf, timestamp, log) /work/mh0727/m300524/anaconda3/envs/my_jupyter/lib/python3.6/site-packages/cfgrib/dataset.py in enforce_unique_attributes(index, attributes_keys, filter_by_keys) DatasetBuildError: multiple values for key 'centre'
- Author Owner
Created by: aaronspring
cdopy with -f nc -t table returnXDataset. But this doesn’t work lazily
- Author Owner
Created by: aaronspring
with
pynio
it works even lazily.conda install pynio
#pwd=/work/mh0727/m300524/experiments/asp_esmControl_ens3175_m001/outdata/echam6ds = xr.open_dataset("asp_esmControl_ens3175_m001_echam6_tracer_3188.grb",engine='pynio', chunks={'g4_lat_3':64})
missing: a nice mapping from
table
to variables as incdo -t table in out
. could be implemented viapreprocess
inopen_mfdataset
Hi Aaron,
have you tried this?
grb_ds = xr.open_dataset(grb_path, engine='cfgrib', backend_kwargs={"indexpath": ""})
That prevents the
FileNotFoundError
, and tends to give "almost" correct tables for (at least) ECHAM output. I'm looking into the PyNIO solution now, but it turns out the ECHAM guys didn't actually write out standard GRB tables- Author Owner
Hi Paul, ich hatte hier die Notifications ausgestellt und dich nicht gesehen...
/work/mh1007/MPI-GE/onepct/onepct0001/outdata/echam6/onepct0001_echam6_BOT_mm_1950.grb grb_ds = xr.open_dataset(grb_path, engine='cfgrib', backend_kwargs={"indexpath": ""}) --------------------------------------------------------------------------- DatasetBuildError Traceback (most recent call last) <ipython-input-10-444941c83cd0> in <module> ----> 1 grb_ds = xr.open_dataset(grb_path, engine='cfgrib', backend_kwargs={"indexpath": ""}) /work/mh0727/m300524/miniconda3/envs/pymistral/lib/python3.7/site-packages/xarray/backends/api.py in open_dataset(filename_or_obj, group, decode_cf, mask_and_scale, decode_times, autoclose, concat_characters, decode_coords, engine, chunks, lock, cache, drop_variables, backend_kwargs, use_cftime) 518 elif engine == "cfgrib": 519 store = backends.CfGribDataStore( --> 520 filename_or_obj, lock=lock, **backend_kwargs 521 ) 522 /work/mh0727/m300524/miniconda3/envs/pymistral/lib/python3.7/site-packages/xarray/backends/cfgrib_.py in __init__(self, filename, lock, **backend_kwargs) 41 lock = ECCODES_LOCK 42 self.lock = ensure_lock(lock) ---> 43 self.ds = cfgrib.open_file(filename, **backend_kwargs) 44 45 def open_store_variable(self, name, var): /work/mh0727/m300524/miniconda3/envs/pymistral/lib/python3.7/site-packages/cfgrib/dataset.py in open_file(path, grib_errors, indexpath, filter_by_keys, read_keys, **kwargs) 635 index_keys = sorted(ALL_KEYS + read_keys) 636 index = open_fileindex(path, grib_errors, indexpath, index_keys).subindex(filter_by_keys) --> 637 return Dataset(*build_dataset_components(index, read_keys=read_keys, **kwargs)) /work/mh0727/m300524/miniconda3/envs/pymistral/lib/python3.7/site-packages/cfgrib/dataset.py in build_dataset_components(index, errors, encode_cf, squeeze, log, read_keys, time_dims) 601 'encode_cf': encode_cf, 602 } --> 603 attributes = build_dataset_attributes(index, filter_by_keys, encoding) 604 return dimensions, variables, attributes, encoding 605 /work/mh0727/m300524/miniconda3/envs/pymistral/lib/python3.7/site-packages/cfgrib/dataset.py in build_dataset_attributes(index, filter_by_keys, encoding) 527 528 def build_dataset_attributes(index, filter_by_keys, encoding): --> 529 attributes = enforce_unique_attributes(index, GLOBAL_ATTRIBUTES_KEYS, filter_by_keys) 530 attributes['Conventions'] = 'CF-1.7' 531 if 'GRIB_centreDescription' in attributes: /work/mh0727/m300524/miniconda3/envs/pymistral/lib/python3.7/site-packages/cfgrib/dataset.py in enforce_unique_attributes(index, attributes_keys, filter_by_keys) 253 fbk.update(filter_by_keys) 254 fbks.append(fbk) --> 255 raise DatasetBuildError("multiple values for key %r" % key, key, fbks) 256 if values and values[0] not in ('undef', 'unknown'): 257 attributes['GRIB_' + key] = values[0] DatasetBuildError: multiple values for key 'centre'
- Author Owner
what they wrote out are these
.codes
files underlog
on the level ofoutdata
... dont they help somehow? Sortof; I get those code files too from my runs. Turns out that the
GRIB
files produced by MPI aren't the same type ofGRIB
files as what is produced by NCAR, and thecodes
apparently aren't realGRIB
tables, just something forCDO
to work with...The fastest way to "fix" it is to convert the files to netCDF with
cdo -f nc -t /path/to/codes copy in out
, but that isn't really a solution, just a bad workaround. Plus NetCDF takes up a considerable amount of space. I'm currently in touch with the people who wrotecfgrib
to see if they have any ideas but I haven't heard back from them yet; and their library isn't really Python but instead something that just wraps up C code.Still trying to work my way through it, but (un)fortunately I currently have papers to write which is eating up most of my time...even if getting nice workflows would save time in the log run (and is more fun to work on...)
- Author Owner
so also your proposed code on github wont really be the nice solution in the end for our purposes?
Maybe we can get it to work somehow...
Can you see what happens if you open up a regular echam grb file, rather than one of the post-processed ones? zB: Für mich geht das (naja, halbwegs)
ds = xr.open_dataset("/work/mh1007/MPI-GE/onepct/onepct0001/outdata/echam6/onepct0001_echam6_echam_2001.grb", engine='cfgrib', backend_kwargs={"indexpath": ""}) ecCodes provides no latitudes/longitudes for gridType='sh' ecCodes provides no latitudes/longitudes for gridType='sh' ecCodes provides no latitudes/longitudes for gridType='sh' ecCodes provides no latitudes/longitudes for gridType='sh' print(ds) <xarray.Dataset> Dimensions: (hybrid: 47, latitude: 96, longitude: 192, time: 12, values: 4160) Coordinates: * time (time) datetime64[ns] 2001-01-31T23:52:00 ... 2001-12-31T23:52:00 step timedelta64[ns] ... * hybrid (hybrid) int64 1 2 3 4 5 6 7 8 9 ... 39 40 41 42 43 44 45 46 47 valid_time (time) datetime64[ns] ... surface int64 ... * latitude (latitude) float64 88.57 86.72 84.86 ... -84.86 -86.72 -88.57 * longitude (longitude) float64 0.0 1.875 3.75 5.625 ... 354.4 356.2 358.1 Dimensions without coordinates: values Data variables: t (time, hybrid, values) float32 ... vo (time, hybrid, values) float32 ... lnsp (time, values) float32 ... d (time, hybrid, values) float32 ... q (time, hybrid, latitude, longitude) float32 ... swhr (time, hybrid, latitude, longitude) float32 ... lwhr (time, hybrid, latitude, longitude) float32 ... ftsktd (time, latitude, longitude) float32 ... sktd (time, latitude, longitude) float32 ... lai_lv (time, latitude, longitude) float32 ... lai_hv (time, latitude, longitude) float32 ... msr_lv (time, latitude, longitude) float32 ... msr_hv (time, latitude, longitude) float32 ... bc_lv (time, latitude, longitude) float32 ... bc_hv (time, latitude, longitude) float32 ... issrd (time, latitude, longitude) float32 ... istrd (time, latitude, longitude) float32 ... sdfor (time, latitude, longitude) float32 ... crwc (time, latitude, longitude) float32 ... cswc (time, latitude, longitude) float32 ... etadot (time, latitude, longitude) float32 ... tclw (time, latitude, longitude) float32 ... tciw (time, latitude, longitude) float32 ... p80.128 (time, latitude, longitude) float32 ... p81.128 (time, latitude, longitude) float32 ... p82.128 (time, latitude, longitude) float32 ... p83.128 (time, latitude, longitude) float32 ... p84.128 (time, latitude, longitude) float32 ... p85.128 (time, latitude, longitude) float32 ... p86.128 (time, latitude, longitude) float32 ... p87.128 (time, latitude, longitude) float32 ... p88.128 (time, latitude, longitude) float32 ... p89.128 (time, latitude, longitude) float32 ... p91.128 (time, latitude, longitude) float32 ... p92.128 (time, latitude, longitude) float32 ... p93.128 (time, latitude, longitude) float32 ... p94.128 (time, latitude, longitude) float32 ... p95.128 (time, latitude, longitude) float32 ... p96.128 (time, latitude, longitude) float32 ... p97.128 (time, latitude, longitude) float32 ... p100.128 (time, latitude, longitude) float32 ... p101.128 (time, latitude, longitude) float32 ... p102.128 (time, latitude, longitude) float32 ... p103.128 (time, latitude, longitude) float32 ... p104.128 (time, latitude, longitude) float32 ... p105.128 (time, latitude, longitude) float32 ... p106.128 (time, latitude, longitude) float32 ... p107.128 (time, latitude, longitude) float32 ... p108.128 (time, latitude, longitude) float32 ... p109.128 (time, latitude, longitude) float32 ... p110.128 (time, latitude, longitude) float32 ... p111.128 (time, latitude, longitude) float32 ... p112.128 (time, latitude, longitude) float32 ... p113.128 (time, latitude, longitude) float32 ... p114.128 (time, latitude, longitude) float32 ... p115.128 (time, latitude, longitude) float32 ... p116.128 (time, latitude, longitude) float32 ... p117.128 (time, latitude, longitude) float32 ... p118.128 (time, latitude, longitude) float32 ... p119.128 (time, latitude, longitude) float32 ... p120.128 (time, latitude, longitude) float32 ... mx2t6 (time, latitude, longitude) float32 ... mn2t6 (time, latitude, longitude) float32 ... p10fg6 (time, latitude, longitude) float32 ... emis (time, latitude, longitude) float32 ... vite (time, latitude, longitude) float32 ... p126.128 (time, latitude, longitude) float32 ... z (time, latitude, longitude) float32 ... sp (time, latitude, longitude) float32 ... tcwv (time, latitude, longitude) float32 ... stl1 (time, latitude, longitude) float32 ... swl1 (time, latitude, longitude) float32 ... sd (time, latitude, longitude) float32 ... lsp (time, latitude, longitude) float32 ... cp (time, latitude, longitude) float32 ... sf (time, latitude, longitude) float32 ... bld (time, latitude, longitude) float32 ... sshf (time, latitude, longitude) float32 ... slhf (time, latitude, longitude) float32 ... tnr (time, latitude, longitude) float32 ... r (time, hybrid, latitude, longitude) float32 ... tcc (time, latitude, longitude) float32 ... u10 (time, latitude, longitude) float32 ... v10 (time, latitude, longitude) float32 ... t2m (time, latitude, longitude) float32 ... d2m (time, latitude, longitude) float32 ... ssrd (time, latitude, longitude) float32 ... swl2 (time, latitude, longitude) float32 ... lsm (time, latitude, longitude) float32 ... strd (time, latitude, longitude) float32 ... ssr (time, latitude, longitude) float32 ... str (time, latitude, longitude) float32 ... tsr (time, latitude, longitude) float32 ... ttr (time, latitude, longitude) float32 ... ewss (time, latitude, longitude) float32 ... nsss (time, latitude, longitude) float32 ... e (time, latitude, longitude) float32 ... swl3 (time, latitude, longitude) float32 ... ccc (time, latitude, longitude) float32 ... lcc (time, latitude, longitude) float32 ... mcc (time, latitude, longitude) float32 ... hcc (time, latitude, longitude) float32 ... neov (time, latitude, longitude) float32 ... btmp (time, latitude, longitude) float32 ... gwd (time, latitude, longitude) float32 ... mx2t (time, latitude, longitude) float32 ... mn2t (time, latitude, longitude) float32 ... o3 (time, latitude, longitude) float32 ... paw (time, latitude, longitude) float32 ... ro (time, latitude, longitude) float32 ... tsrc (time, latitude, longitude) float32 ... ttrc (time, latitude, longitude) float32 ... ssrc (time, latitude, longitude) float32 ... strc (time, latitude, longitude) float32 ... vimd (time, latitude, longitude) float32 ... dhr (time, latitude, longitude) float32 ... dhcc (time, latitude, longitude) float32 ... dhlc (time, latitude, longitude) float32 ... ctmw (time, hybrid, latitude, longitude) float32 ... iews (time, latitude, longitude) float32 ... inss (time, latitude, longitude) float32 ... ishf (time, latitude, longitude) float32 ... ie (time, latitude, longitude) float32 ... asq (time, latitude, longitude) float32 ... skt (time, latitude, longitude) float32 ... stl4 (time, hybrid, latitude, longitude) float32 ... swl4 (time, latitude, longitude) float32 ... tsn (time, latitude, longitude) float32 ... csf (time, hybrid, latitude, longitude) float32 ... Attributes: GRIB_edition: 1 GRIB_centre: mpim GRIB_centreDescription: Max Planck Institute for Meteorology GRIB_subCentre: 1 Conventions: CF-1.7 institution: Max Planck Institute for Meteorology
if there is a way for this ecCodes thing to read the MPI-Met code files, I think we would have a nice solution...
- Author Owner
ich hab mir mal sowas zusammengeschrieben... aber so richtig toll ist das auch nicht
import pandas as pd def read_table_file(table_file_str): """Read parameter table file. Args: table_file_str (str): Location on disk of table file (find in exp_id/log/.codes) Returns: pd.DataFrame: parameter table """ table_file = pd.read_fwf( table_file_str, header=None, names=[ 'code', 'a', 'varname', 'b', 'c', 'long_name_and_unit', 'd', 'e' ]) table_file.index = table_file['code'] for a in 'abcde': del table_file[a] table_file['novarname'] = 'var' + table_file['code'].apply(str) table_file['unit'] = table_file['long_name_and_unit'].str.split( '[', expand=True).get(1) table_file['long_name'] = table_file['long_name_and_unit'].str.split( '[', expand=True).get(0) table_file['units'] = table_file['unit'].str.replace(']', '') del table_file['long_name_and_unit'] return table_file def set_table(ds, table_file_str, match_by_order=True): """Replace variables in xr.Dataset with parameter table. Args: ds (xr.object): input ds. table_file_str (str): Location on disk of table file (find in exp_id/log/.codes) match_by_order (bool): fix when some other parameter table is read instead by pynio. match variable names by order. Returns: xr.object: renamed ds """ table = read_table_file(table_file_str) table_dict = {} for ii, id in enumerate(table.index): # varname if match_by_order: item = table['varname'].loc[id] # new varname key = list(ds.data_vars)[ii] # old varname else: key, item = table[['novarname', 'varname']].loc[id] table_dict[key] = item # attrs for attritem in ['long_name', 'units', 'code']: ds[key].attrs[attritem] = table[attritem].iloc[ii] if match_by_order and 'initial_time0_hours' in ds.dims: table_dict['initial_time0_hours'] = 'time' if match_by_order and 'g4_lon_2' in ds.dims: table_dict['g4_lon_2'] = 'lon' if match_by_order and 'g4_lat_1' in ds.dims: table_dict['g4_lat_1'] = 'lat' ds = ds.rename(table_dict) for tv in ['initial_time0_hours', 'initial_time0_encoded']: if tv in ds.data_vars: del ds[tv] return ds.squeeze()
- Author Owner
da hatte ich was mit
pynio
geoeffnetds = xr.open_dataset(engine='pynio') ... ds = set_table(ds, table_str)
- Author Owner
for now I use my
pymistral.cdo_post
module and let everything run throughcdo
- Author Owner
It is possible to set
ECCODES_DEFINITION_PATH
ineccodes
, see http://download.ecmwf.int/test-data/eccodes/html/namespaces.html. But thecodetab
you want to use here from MPIESMgrb
output is a CDO parameter table, see https://code.mpimet.mpg.de/projects/cdo/embedded/cdo.pdf#section.1.8, so in my understanding something CDO internal and likely not usable witheccodes
/cfgrib
. Thank you very much for starting this post. I arrive late, and I had given up on this before, but since I am still using MPI-ESM output, I thought I would give it another try and post this here for future reference.
I generated the definition files for ECHAM/JSBACH standard output (not including all possible debug output), according to the CDO parameter tables and also the source code of my model working version (I followed the discussion in https://github.com/ecmwf/cfgrib/issues/150). Just place the definitions folder anywhere and then set
ECCODES_DEFINITION_PATH
accordingly (in my bash config file I load module eccodes and setECCODES_DEFINITION_PATH="/path/to/my/definitions:${ECCODES_DEFINITION_PATH}"
).I am able to work with
xr.open_dataset
andxr.open_mfdataset
using thecfgrib
engine seemingly without problems, although it is sometimes still needed to specify a singlecentre
orsubCentre
(usingfilter_by_keys
), because of small differences in the generated GRIB1 files. I attach the definition files and a little helper script to parse the CDO parameter tables. An example JSBACH file:test = xr.open_dataset('/home/m/m300823/mdv0052_0_jsbach_jsbach_mm_4200.grb', engine='cfgrib', filter_by_keys={'subCentre': 1}, use_cftime=True, indexpath='') print(test) <xarray.Dataset> Size: 43MB Dimensions: (time: 12, tile: 11, latitude: 48, longitude: 96, depth: 5) Coordinates: * time (time) object 96B 4200-01-31 23:30:00 ... ... step timedelta64[ns] 8B ... * tile (tile) float64 88B 256.0 512.0 ... 2.816e+03 * latitude (latitude) float64 384B 87.16 ... -87.16 * longitude (longitude) float64 768B 0.0 3.75 ... 356.2 valid_time (time) object 96B ... surface float64 8B ... * depth (depth) float64 40B 3.0 19.0 78.0 268.0 698.0 Data variables: (12/31) cover_fract_pot (time, tile, latitude, longitude) float32 2MB ... cover_fract (time, tile, latitude, longitude) float32 2MB ... albedo_vis (time, tile, latitude, longitude) float32 2MB ... albedo_nir (time, tile, latitude, longitude) float32 2MB ... veg_ratio_max (time, latitude, longitude) float32 221kB ... swdown_acc (time, latitude, longitude) float32 221kB ... ... ... CO2_flux_herbivory (time, latitude, longitude) float32 221kB ... CO2_emission_landcover_change (time, latitude, longitude) float32 221kB ... CO2_emission_harvest (time, latitude, longitude) float32 221kB ... tcc (time, latitude, longitude) float32 221kB ... disch (time, latitude, longitude) float32 221kB ... awfre (time, latitude, longitude) float32 221kB ... Attributes: GRIB_edition: 1 GRIB_centre: mpim GRIB_centreDescription: Max Planck Institute for Meteorology GRIB_subCentre: 1 Conventions: CF-1.7 institution: Max Planck Institute for Meteorology history: 2024-06-21T12:11 GRIB to CDM+CF via cfgrib-0.9.1...
An example ECHAM file:
test = xr.open_dataset('/home/m/m300823/mdv0052_0_echam6_echam_4200.grb', engine='cfgrib', filter_by_keys={'subCentre': 1}, use_cftime=True, indexpath='') print(test) <xarray.Dataset> Size: 82MB Dimensions: (time: 12, level: 31, values: 1056, latitude: 48, longitude: 96) Coordinates: * time (time) object 96B 4200-01-31 23:30:00 ... 4200-12-31 23:30:00 step timedelta64[ns] 8B ... * level (level) float64 248B 1.0 2.0 3.0 4.0 5.0 ... 28.0 29.0 30.0 31.0 valid_time (time) object 96B ... surface float64 8B ... * latitude (latitude) float64 384B 87.16 83.48 79.78 ... -83.48 -87.16 * longitude (longitude) float64 768B 0.0 3.75 7.5 ... 348.8 352.5 356.2 Dimensions without coordinates: values Data variables: (12/143) t (time, level, values) float32 2MB ... vo (time, level, values) float32 2MB ... lnsp (time, values) float32 51kB ... d (time, level, values) float32 2MB ... q (time, level, latitude, longitude) float32 7MB ... swhr (time, level, latitude, longitude) float32 7MB ... ... ... asq (time, latitude, longitude) float32 221kB ... skt (time, latitude, longitude) float32 221kB ... stl4 (time, level, latitude, longitude) float32 7MB ... swl4 (time, latitude, longitude) float32 221kB ... tsn (time, latitude, longitude) float32 221kB ... csf (time, level, latitude, longitude) float32 7MB ... Attributes: GRIB_edition: 1 GRIB_centre: mpim GRIB_centreDescription: Max Planck Institute for Meteorology GRIB_subCentre: 1 Conventions: CF-1.7 institution: Max Planck Institute for Meteorology history: 2024-06-21T12:11 GRIB to CDM+CF via cfgrib-0.9.1...
Test with multi-file dataset:
test = xr.open_mfdataset('/home/m/m300823/mdv0052_0_echam6_echam_420*.grb', engine='cfgrib', filter_by_keys={'subCentre': 1}, use_cftime=True, indexpath='') print(test) <xarray.Dataset> Size: 246MB Dimensions: (time: 36, level: 31, values: 1056, latitude: 48, longitude: 96) Coordinates: * time (time) object 288B 4200-01-31 23:30:00 ... 4202-12-31 23:30:00 step timedelta64[ns] 8B 00:00:00 * level (level) float64 248B 1.0 2.0 3.0 4.0 5.0 ... 28.0 29.0 30.0 31.0 valid_time (time) object 288B dask.array<chunksize=(12,), meta=np.ndarray> surface float64 8B 0.0 * latitude (latitude) float64 384B 87.16 83.48 79.78 ... -83.48 -87.16 * longitude (longitude) float64 768B 0.0 3.75 7.5 ... 348.8 352.5 356.2 Dimensions without coordinates: values Data variables: (12/143) t (time, level, values) float32 5MB dask.array<chunksize=(12, 31, 1056), meta=np.ndarray> vo (time, level, values) float32 5MB dask.array<chunksize=(12, 31, 1056), meta=np.ndarray> lnsp (time, values) float32 152kB dask.array<chunksize=(12, 1056), meta=np.ndarray> d (time, level, values) float32 5MB dask.array<chunksize=(12, 31, 1056), meta=np.ndarray> q (time, level, latitude, longitude) float32 21MB dask.array<chunksize=(12, 31, 48, 96), meta=np.ndarray> swhr (time, level, latitude, longitude) float32 21MB dask.array<chunksize=(12, 31, 48, 96), meta=np.ndarray> ... ... asq (time, latitude, longitude) float32 664kB dask.array<chunksize=(12, 48, 96), meta=np.ndarray> skt (time, latitude, longitude) float32 664kB dask.array<chunksize=(12, 48, 96), meta=np.ndarray> stl4 (time, level, latitude, longitude) float32 21MB dask.array<chunksize=(12, 31, 48, 96), meta=np.ndarray> swl4 (time, latitude, longitude) float32 664kB dask.array<chunksize=(12, 48, 96), meta=np.ndarray> tsn (time, latitude, longitude) float32 664kB dask.array<chunksize=(12, 48, 96), meta=np.ndarray> csf (time, level, latitude, longitude) float32 21MB dask.array<chunksize=(12, 31, 48, 96), meta=np.ndarray> Attributes: GRIB_edition: 1 GRIB_centre: mpim GRIB_centreDescription: Max Planck Institute for Meteorology GRIB_subCentre: 1 Conventions: CF-1.7 institution: Max Planck Institute for Meteorology history: 2024-06-21T12:16 GRIB to CDM+CF via cfgrib-0.9.1...