 
     if (idx < local_num)
         {
-        d_virial_rigid[idx] = 0.0;
+        d_virial_rigid[idx] = 0.0f;
         }
 
     }

                    pvel.x = vel.x + angvel.y * ri.z - angvel.z * ri.y;
                    pvel.y = vel.y + angvel.z * ri.x - angvel.x * ri.z;
                    pvel.z = vel.z + angvel.x * ri.y - angvel.y * ri.x;
                    pvel.w = 0.0;
                    
                    float4 fc;
                    fc.x = massone * (pvel.x - old_vel.x) / dt_half - pforce.x;
                    fc.y = massone * (pvel.y - old_vel.y) / dt_half - pforce.y;
                    fc.z = massone * (pvel.z - old_vel.z) / dt_half - pforce.z; 
                    
                    float pvirial = 0.5 * (old_pos.x * fc.x + old_pos.y * fc.y + old_pos.z * fc.z) / 3.0;
                           
                    // accumulate from the first integration part into particle net virial
                    pvirial += virial;

        float4 force, torque;
        float4 mbody, tbody, fquat;
        
        float dt_half = 0.5f * deltaT;
        float   onednft, onednfr, tmp, scale_t, scale_r, akin_t, akin_r;
        
        onednft = 1.0f + (float) (npt_rdata_dimension) / (float) (npt_rdata_nf_t);
        onednfr = (float) (npt_rdata_dimension) / (float) (npt_rdata_nf_r);

        tmp = -1.0f * dt_half * (npt_rdata_eta_dot_t0 + onednft * npt_rdata_epsilon_dot);
        scale_t = exp(tmp);
        tmp = -1.0f * dt_half * (npt_rdata_eta_dot_r0 + onednfr * npt_rdata_epsilon_dot);
        scale_r = exp(tmp);
        
        unsigned int idx_body = tex1Dfetch(rigid_data_body_indices_tex, group_idx);
