The buffer ops code needs cleanup of data types, casting, and safety checks implicit type compatibility assumptions that remain.
The host code in
nbnxn_gpu_x_to_nbat_x() uses hacky and unsafe cast of pointers, e.g. nb->atdata.xq is cast to float*, then the
nbnxn_gpu_x_to_nbat_x_kernel() kernel calculates the offsets implicitly assuming the float4 data type, then casting the load to a float3.
gm_coordinatesRvec is passed as rvec then cast to float3 when storing without an assertion on the size compatibility.