 
         LOOP_TWO_RING_GPUSP(
 
-            float vnx = grid_vel[current_node + device_settings.num_mpm_nodes * 0];  //
-            float vny = grid_vel[current_node + device_settings.num_mpm_nodes * 1];  //
-            float vnz = grid_vel[current_node + device_settings.num_mpm_nodes * 2];
+            float vnx = grid_vel[current_node * 3 + 0];  //
+            float vny = grid_vel[current_node * 3 + 1];  //
+            float vnz = grid_vel[current_node * 3 + 2];
 
             float Tx = (xix - current_node_locationx) * inv_bin_edge;  //
             float Ty = (xiy - current_node_locationy) * inv_bin_edge;  //

        const float bin_edge = device_settings.bin_edge;
        const float inv_bin_edge = device_settings.inv_bin_edge;

        LOOP_TWO_RING_GPUSP(float vnx = grid_vel[current_node + device_settings.num_mpm_nodes * 0];  //
                            float vny = grid_vel[current_node + device_settings.num_mpm_nodes * 1];  //
                            float vnz = grid_vel[current_node + device_settings.num_mpm_nodes * 2];

                            float Tx = (xix - current_node_locationx) * inv_bin_edge;  //
                            float Ty = (xiy - current_node_locationy) * inv_bin_edge;  //

            float resy = VAP[1] * valx + VAP[4] * valy + VAP[7] * valz;
            float resz = VAP[2] * valx + VAP[5] * valy + VAP[8] * valz;

            atomicAdd(&result_array[current_node * 3 + 0], resx); atomicAdd(&result_array[current_node * 3 + 1], resy);
            atomicAdd(&result_array[current_node * 3 + 2], resz););
    }
}
CUDA_GLOBAL void kMultiplyB(const float* v_array, const float* node_mass, float* result_array) {
