| 65 | // } |
| 66 | |
| 67 | double ProductManifoldInner(DeviceBlasHandle& CUOPT_blas_handle, opt_var &AR,opt_var &BR, opt_var &As, opt_var &Bs){ |
| 68 | double result1 = 0; |
| 69 | double result2 = 0; |
| 70 | CHECK_CUBLAS(cublasDdot(CUOPT_blas_handle.cublas_handle, AR.total_size, AR.vals, 1, BR.vals, 1, &result1)); |
| 71 | CHECK_CUBLAS(cublasDdot(CUOPT_blas_handle.cublas_handle, As.total_size, As.vals, 1, Bs.vals, 1, &result2)); |
| 72 | |
| 73 | return result1+result2; |
| 74 | } |
| 75 | |
| 76 | |
| 77 | void XMtrustregion(opt_var &C, const opt_var &R0, const opt_var &s0, opt_var &R_result, opt_var &s_result,const double lam, double &gradtol, double linesearch_step , opt_var &v , double* primal_value, const double maxtime){ |