 
         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;  //

    if (current_node < device_settings.num_mpm_nodes) {
        float mass = node_mass[current_node];  //
        if (mass > 0) {
            rhs[current_node * 3 + 0] = mass * grid_vel[current_node * 3 + 0];  //
            rhs[current_node * 3 + 1] = mass * grid_vel[current_node * 3 + 1];  //
            rhs[current_node * 3 + 2] = mass * grid_vel[current_node * 3 + 2];  //
        } else {
            rhs[current_node * 3 + 0] = 0;
            rhs[current_node * 3 + 1] = 0;
            rhs[current_node * 3 + 2] = 0;
        }
    }
}
