@@ -37,6 +37,7 @@ def __init__(
3737 self .x = self ._get_coord (0 )
3838 self .y = self ._get_coord (1 )
3939 self .z = self ._get_coord (2 )
40+ self .t = float (ds .attrs ["time" ])
4041
4142 def _get_coord (self , coord_idx : int ) -> NDArray [Any ]:
4243 return np .linspace (
@@ -68,25 +69,25 @@ def decode_psc(
6869 length : ArrayLike | None = None ,
6970 corner : ArrayLike | None = None ,
7071) -> xr .Dataset :
71- da = ds [ next ( iter ( ds ))] # first dataset
72- if da . dims [ 0 ] == "dim_0_1" :
72+ dims = list ( ds . dims )
73+ if "dim_0_1" in dims :
7374 # for compatibility, if dimensions weren't saved as attribute in the .bp file,
7475 # fix them up here
7576 ds = ds .rename_dims (
7677 {
77- da . dims [0 ]: "step" ,
78- # dims[1] is the "component" dimension, which gets removed later
79- da . dims [2 ]: "z" ,
80- da . dims [3 ]: "y" ,
81- da . dims [4 ]: "x" ,
78+ dims [0 ]: "step" ,
79+ dims [1 ]: "component" ,
80+ dims [2 ]: "z" ,
81+ dims [3 ]: "y" ,
82+ dims [4 ]: "x" ,
8283 }
8384 )
8485 ds = ds .squeeze ("step" )
8586
8687 for var_name in ds :
8788 components = list (iter_components (var_name , species_names ))
8889 for component_idx , component in enumerate (components ):
89- ds = ds .assign ({component : ds [var_name ][ component_idx , :, :, :] })
90+ ds = ds .assign ({component : ds [var_name ]. isel ( component = component_idx ) })
9091 if var_name not in components :
9192 ds = ds .drop_vars ([var_name ])
9293
@@ -95,6 +96,7 @@ def decode_psc(
9596 "x" : ("x" , run_info .x ),
9697 "y" : ("y" , run_info .y ),
9798 "z" : ("z" , run_info .z ),
99+ "t" : run_info .t ,
98100 }
99101 ds = ds .assign_coords (coords )
100102
0 commit comments