1414from zarr .storage import DirectoryStore
1515
1616import parcels
17- from parcels ._core .particle import _SAME_AS_FIELDSET_TIME_INTERVAL , ParticleClass
17+ from parcels ._core .particle import ParticleClass
1818from parcels ._core .utils .time import timedelta_to_float
1919
2020if TYPE_CHECKING :
@@ -210,18 +210,17 @@ def _write_particle_data(self, *, particle_data, pclass, time_interval, time, in
210210 attrs = _create_variables_attribute_dict (pclass , time_interval )
211211 obs = np .zeros ((self ._maxids ), dtype = np .int32 )
212212 for var in vars_to_write :
213- dtype = _maybe_convert_time_dtype (var .dtype )
214213 if var .name not in ["trajectory" ]: # because 'trajectory' is written as coordinate
215214 if var .to_write == "once" :
216215 data = np .full (
217216 (arrsize [0 ],),
218- _DATATYPES_TO_FILL_VALUES [dtype ],
219- dtype = dtype ,
217+ _DATATYPES_TO_FILL_VALUES [var . dtype ],
218+ dtype = var . dtype ,
220219 )
221220 data [ids_once ] = particle_data [var .name ][indices_to_write_once ]
222221 dims = ["trajectory" ]
223222 else :
224- data = np .full (arrsize , _DATATYPES_TO_FILL_VALUES [dtype ], dtype = dtype )
223+ data = np .full (arrsize , _DATATYPES_TO_FILL_VALUES [var . dtype ], dtype = var . dtype )
225224 data [ids , 0 ] = particle_data [var .name ][indices_to_write ]
226225 dims = ["trajectory" , "obs" ]
227226 ds [var .name ] = xr .DataArray (data = data , dims = dims , attrs = attrs [var .name ])
@@ -232,15 +231,14 @@ def _write_particle_data(self, *, particle_data, pclass, time_interval, time, in
232231 Z = zarr .group (store = store , overwrite = False )
233232 obs = particle_data ["obs_written" ][indices_to_write ]
234233 for var in vars_to_write :
235- dtype = _maybe_convert_time_dtype (var .dtype )
236234 if self ._maxids > Z [var .name ].shape [0 ]:
237- self ._extend_zarr_dims (Z [var .name ], store , dtype = dtype , axis = 0 )
235+ self ._extend_zarr_dims (Z [var .name ], store , dtype = var . dtype , axis = 0 )
238236 if var .to_write == "once" :
239237 if len (once_ids ) > 0 :
240238 Z [var .name ].vindex [ids_once ] = particle_data [var .name ][indices_to_write_once ]
241239 else :
242240 if max (obs ) >= Z [var .name ].shape [1 ]: # type: ignore[type-var]
243- self ._extend_zarr_dims (Z [var .name ], store , dtype = dtype , axis = 1 )
241+ self ._extend_zarr_dims (Z [var .name ], store , dtype = var . dtype , axis = 1 )
244242 Z [var .name ].vindex [ids , obs ] = particle_data [var .name ][indices_to_write ]
245243
246244 particle_data ["obs_written" ][indices_to_write ] = obs + 1
@@ -270,9 +268,7 @@ def _create_variables_attribute_dict(particle: ParticleClass, time_interval: Tim
270268
271269 vars = [var for var in particle .variables if var .to_write is not False ]
272270 for var in vars :
273- fill_value = {}
274- if var .dtype is not _SAME_AS_FIELDSET_TIME_INTERVAL .VALUE :
275- fill_value = {"_FillValue" : _DATATYPES_TO_FILL_VALUES [var .dtype ]}
271+ fill_value = {"_FillValue" : _DATATYPES_TO_FILL_VALUES [var .dtype ]}
276272
277273 attrs [var .name ] = {** var .attrs , ** fill_value }
278274
@@ -305,15 +301,6 @@ def _to_write_particles(particle_data, time):
305301 )[0 ]
306302
307303
308- def _maybe_convert_time_dtype (dtype : np .dtype | _SAME_AS_FIELDSET_TIME_INTERVAL ) -> np .dtype :
309- """Convert the dtype of time to float64 if it is not already."""
310- if dtype is _SAME_AS_FIELDSET_TIME_INTERVAL .VALUE :
311- return np .dtype (
312- np .int64
313- ) #! We need to have here some proper mechanism for converting particle data to the data that is to be output to zarr (namely the time needs to be converted to float seconds by subtracting the time_interval.left)
314- return dtype
315-
316-
317304def _get_calendar_and_units (time_interval : TimeInterval ) -> dict [str , str ]:
318305 calendar = None
319306 units = "seconds"
0 commit comments