@@ -59,7 +59,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
5959 ignore_unknown_vars = False , default_dtype = None ,
6060 nx = None , ny = None , nz = None ,
6161 llc_method = "smallchunks" , extra_metadata = None ,
62- extra_variables = None ):
62+ extra_variables = None ,
63+ custom_grid_variables = {}):
6364 """Open MITgcm-style mds (.data / .meta) file output as xarray datset.
6465
6566 Parameters
@@ -148,6 +149,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
148149 standard_name='Sensitivity_to_theta',
149150 long_name='Sensitivity of cost function to theta', units='[J]/degC'))
150151 )
152+ custom_grid_variables : dict, optional
153+ Similar to extra_variables, but these files don't have a time stamp.
151154
152155
153156 Returns
@@ -235,7 +238,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
235238 default_dtype = default_dtype ,
236239 nx = nx , ny = ny , nz = nz , llc_method = llc_method ,
237240 levels = levels , extra_metadata = extra_metadata ,
238- extra_variables = extra_variables )
241+ extra_variables = extra_variables ,
242+ custom_grid_variables = custom_grid_variables )
239243 datasets = [open_mdsdataset (
240244 data_dir , iters = iternum , read_grid = False , ** kwargs )
241245 for iternum in iters ]
@@ -291,7 +295,8 @@ def open_mdsdataset(data_dir, grid_dir=None,
291295 default_dtype = default_dtype ,
292296 nx = nx , ny = ny , nz = nz , llc_method = llc_method ,
293297 levels = levels , extra_metadata = extra_metadata ,
294- extra_variables = extra_variables )
298+ extra_variables = extra_variables ,
299+ custom_grid_variables = custom_grid_variables )
295300
296301 ds = xr .Dataset .load_store (store )
297302 if swap_dims :
@@ -376,7 +381,8 @@ def __init__(self, data_dir, grid_dir=None,
376381 default_dtype = np .dtype ('f4' ),
377382 nx = None , ny = None , nz = None , llc_method = "smallchunks" ,
378383 levels = None , extra_metadata = None ,
379- extra_variables = None ):
384+ extra_variables = None ,
385+ custom_grid_variables = {}):
380386 """
381387 This is not a user-facing class. See open_mdsdataset for argument
382388 documentation. The only ones which are distinct are.
@@ -401,6 +407,7 @@ def __init__(self, data_dir, grid_dir=None,
401407 self .data_dir = data_dir
402408 self .grid_dir = grid_dir if (grid_dir is not None ) else data_dir
403409 self .extra_variables = extra_variables
410+ self .custom_grid_variables = custom_grid_variables
404411 self ._ignore_unknown_vars = ignore_unknown_vars
405412
406413 # The endianness of the files
@@ -573,7 +580,8 @@ def __init__(self, data_dir, grid_dir=None,
573580 # build lookup tables for variable metadata
574581 self ._all_grid_variables = _get_all_grid_variables (self .geometry ,
575582 self .grid_dir ,
576- self .layers )
583+ self .layers ,
584+ self .custom_grid_variables )
577585 self ._all_data_variables = _get_all_data_variables (self .data_dir ,
578586 self .grid_dir ,
579587 self .layers ,
@@ -831,7 +839,7 @@ def _guess_layers(data_dir):
831839 return all_layers
832840
833841
834- def _get_all_grid_variables (geometry , grid_dir = None , layers = {}):
842+ def _get_all_grid_variables (geometry , grid_dir = None , layers = {}, custom_grid_variables = {} ):
835843 """"Put all the relevant grid metadata into one big dictionary."""
836844 possible_hcoords = {'cartesian' : horizontal_coordinates_cartesian ,
837845 'llc' : horizontal_coordinates_llc ,
@@ -841,7 +849,7 @@ def _get_all_grid_variables(geometry, grid_dir=None, layers={}):
841849 hcoords = possible_hcoords [geometry ]
842850
843851 # look for extra variables, if they exist in grid_dir
844- extravars = _get_extra_grid_variables (grid_dir ) if grid_dir is not None else {}
852+ extravars = _get_extra_grid_variables (grid_dir , custom_grid_variables = custom_grid_variables ) if grid_dir is not None else {}
845853
846854 allvars = [hcoords , vertical_coordinates , horizontal_grid_variables ,
847855 vertical_grid_variables , volume_grid_variables , mask_variables ,
@@ -856,21 +864,22 @@ def _get_all_grid_variables(geometry, grid_dir=None, layers={}):
856864 return metadata
857865
858866
859- def _get_extra_grid_variables (grid_dir ):
867+ def _get_extra_grid_variables (grid_dir , custom_grid_variables ):
860868 """Scan a directory and return all file prefixes for extra grid files.
861869 Then return the variable information for each of these"""
862870 extra_grid = {}
863871
864- fnames = dict ([[val ['filename' ],key ] for key ,val in extra_grid_variables .items () if 'filename' in val ])
872+ all_extras = {** extra_grid_variables , ** custom_grid_variables }
873+ fnames = dict ([[val ['filename' ],key ] for key ,val in all_extras .items () if 'filename' in val ])
865874
866875 all_datafiles = listdir_endswith (grid_dir , '.data' )
867876 for f in all_datafiles :
868877 prefix = os .path .split (f [:- 5 ])[- 1 ]
869- # Only consider what we find that matches extra_grid_vars
870- if prefix in extra_grid_variables :
871- extra_grid [prefix ] = extra_grid_variables [prefix ]
878+ # Only consider what we find that matches extra/custom_grid_vars
879+ if prefix in all_extras :
880+ extra_grid [prefix ] = all_extras [prefix ]
872881 elif prefix in fnames :
873- extra_grid [fnames [prefix ]] = extra_grid_variables [fnames [prefix ]]
882+ extra_grid [fnames [prefix ]] = all_extras [fnames [prefix ]]
874883
875884 return extra_grid
876885
0 commit comments