@@ -373,16 +373,25 @@ def deposit(
373373 # octree deposit routines, so we reverse it here to match the
374374 # convention there
375375
376- # append a dummy dimension because we are only depositing onto
377- # one grid
378- nvals = tuple (self .ActiveDimensions [::- 1 ]) + (1 ,)
379- if vector_field :
376+ nvals = tuple (self .ActiveDimensions [::- 1 ])
377+ scalar_as_vector = (
378+ not vector_field
379+ and method != "count"
380+ and fields is not None
381+ and len (fields ) > 0
382+ and getattr (fields [0 ], "ndim" , 0 ) == 1
383+ )
384+ if scalar_as_vector :
385+ fields = [np .ascontiguousarray (f .reshape (f .shape [0 ], 1 )) for f in fields ]
386+
387+ use_vector_path = vector_field or scalar_as_vector
388+ # Append a dummy grid dimension because we only deposit onto one grid.
389+ # For vector fields, append an additional vector-component dimension.
390+ if use_vector_path :
380391 vec_size = fields [0 ].shape [- 1 ] if fields else 1
381- nvals = nvals + (vec_size , )
392+ op = cls ( nvals + (1 , vec_size ), kernel_name )
382393 else :
383- vec_size = 1
384-
385- op = cls (nvals , kernel_name )
394+ op = cls (nvals + (1 ,), kernel_name )
386395
387396 op .initialize ()
388397 if positions .size > 0 :
@@ -392,12 +401,16 @@ def deposit(
392401 return
393402 # Fortran-ordered, so transpose.
394403 vals = vals .transpose ()
395- # squeeze dummy dimension(s) we appended above
396- if vector_field :
397- new_shape = (vec_size , * self .ActiveDimensions )
404+ if use_vector_path :
405+ # (vec, 1, Nx, Ny, Nz) -> (Nx, Ny, Nz, vec)
406+ vals = np .squeeze (vals , axis = 1 )
407+ vals = np .moveaxis (vals , 0 , - 1 )
408+ if scalar_as_vector :
409+ vals = np .squeeze (vals , axis = - 1 )
398410 else :
399- new_shape = self .ActiveDimensions
400- return vals .reshape (new_shape )
411+ # (1, Nx, Ny, Nz) -> (Nx, Ny, Nz)
412+ vals = np .squeeze (vals , axis = 0 )
413+ return vals
401414
402415 def select_blocks (self , selector ):
403416 mask = self ._get_selector_mask (selector )
0 commit comments