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