inline void reduce_result(ResultT& result, const ResultT& local_result) { if(common::PE::Comm::instance().is_active()) { const Uint size = local_result.size(); std::vector<Real> local_vec(&local_result[0], &local_result[0]+size); std::vector<Real> result_vec(size); common::PE::Comm::instance().all_reduce(common::PE::plus(), local_vec, result_vec); for(Uint i = 0; i != size; ++i) { result[i] = result_vec[i]; } } else { result = local_result; } }
// Local space means "parameter space". LLVector3 LLBreastMotion::toLocal(const LLVector3 &world_vector) { LLVector3 local_vec(0,0,0); LLJoint *chest_joint = mChestState->getJoint(); const LLQuaternion world_rot = chest_joint->getWorldRotation(); // Cleavage LLVector3 breast_dir_world_vec = LLVector3(-1,0,0) * world_rot; // -1 b/c cleavage param changes opposite to direction breast_dir_world_vec.normalize(); local_vec[0] = world_vector * breast_dir_world_vec; // Up-Down Bounce LLVector3 breast_up_dir_world_vec = LLVector3(0,0,1) * world_rot; breast_up_dir_world_vec.normalize(); local_vec[1] = world_vector * breast_up_dir_world_vec; return local_vec; }