 real & obj1,real& obj2,real& min_val,
 custom_vector<real> &obj1_tmp,custom_vector<real> &obj2_tmp,custom_vector<real> &obj3_tmp1,custom_vector<real> &obj3_tmp2) {
 
+	custom_vector<real> lm(number_of_contacts);
+
 #pragma omp parallel for
 		for (uint index = 0; index < number_of_contacts; index++) {
 			int2 id_ = ids[index];

		_mx.y = _my.y + _mg.y * t_k;
		_mx.z = _my.z + _mg.z * t_k;

		function_Project_single(index, id_, fric.data(), _mx);

		mx[index+ number_of_contacts * 0] = _mx.x;
		mx[index+ number_of_contacts * 1] = _mx.y;

		}

		shurA(mx);

#pragma omp parallel for
		for (uint index = 0; index < number_of_contacts; index++) {
			real3 temp = R3(0);
			int2 id_ = ids[index];
