|
24 | 24 | import pandas as pd |
25 | 25 | import xarray as xr |
26 | 26 | from opendrift.readers.basereader import BaseReader, StructuredReader |
27 | | -from opendrift.readers import open_dataset_opendrift, datetime_from_variable |
| 27 | +from opendrift.readers import open_dataset_opendrift, datetime_from_variable, \ |
| 28 | + add_standard_name_for_surface_grib_variables |
28 | 29 |
|
29 | 30 |
|
30 | 31 | class Reader(StructuredReader, BaseReader): |
@@ -115,6 +116,8 @@ def __init__(self, filename=None, zarr_storage_options=None, name=None, proj4=No |
115 | 116 |
|
116 | 117 | self.Dataset = open_dataset_opendrift(source=filename, zarr_storage_options=zarr_storage_options) |
117 | 118 |
|
| 119 | + self.Dataset = add_standard_name_for_surface_grib_variables(self.Dataset) |
| 120 | + |
118 | 121 | if name is None: |
119 | 122 | self.name = str(filename) |
120 | 123 | else: |
@@ -207,7 +210,12 @@ def __init__(self, filename=None, zarr_storage_options=None, name=None, proj4=No |
207 | 210 | if standard_name == 'time' or axis == 'T' or var_name in ['time', 'vtime']: |
208 | 211 | # Read and store time coverage (of this particular file) |
209 | 212 | if len(var.dims)==1: |
210 | | - self.dimensions['time'] = var.dims[0] |
| 213 | + if 'time' in self.dimensions: |
| 214 | + if not isinstance(self.dimensions['time'], list): |
| 215 | + self.dimensions['time'] = [self.dimensions['time']] |
| 216 | + self.dimensions['time'].append(var.dims[0]) |
| 217 | + else: |
| 218 | + self.dimensions['time'] = var.dims[0] |
211 | 219 |
|
212 | 220 | self.times = datetime_from_variable(var) |
213 | 221 | if len(self.times) > 1: |
@@ -378,6 +386,18 @@ def __init__(self, filename=None, zarr_storage_options=None, name=None, proj4=No |
378 | 386 | var = var.isel(ensemble_member=0).squeeze() |
379 | 387 | self.Dataset[va] = var |
380 | 388 |
|
| 389 | + if isinstance(self.dimensions.get('time', None), list): |
| 390 | + warning = f'Several time dimensions detected: {self.dimensions["time"]}' |
| 391 | + variable_time_dimensions = [] # Check which time dimensions are actually used |
| 392 | + for vn, va in self.variable_mapping.items(): |
| 393 | + variable_time_dimensions += [x for x in self.Dataset[va].coords if x in self.dimensions['time']] |
| 394 | + variable_time_dimensions = list(set(variable_time_dimensions)) |
| 395 | + if len(variable_time_dimensions) == 1: |
| 396 | + logger.debug(f'{warning}: Using single time dimension found in detected variables: {variable_time_dimensions}') |
| 397 | + self.dimensions['time'] = variable_time_dimensions[0] |
| 398 | + elif len(variable_time_dimensions) > 1: |
| 399 | + raise ValueError(f'{warning}, and also several time dimensions used by detected variables: {variable_time_dimensions}') |
| 400 | + |
381 | 401 | # Run constructor of parent Reader class |
382 | 402 | super().__init__() |
383 | 403 |
|
|
0 commit comments