| 40 | } |
| 41 | |
| 42 | bool checkeig(opt_var &C, const opt_var &sR, const double lam, opt_var &v, double primal_value){ |
| 43 | // initialize |
| 44 | DeviceBlasHandle CUOPT_blas_handle; |
| 45 | CUOPT_blas_handle.activate(); |
| 46 | DeviceSolverSpHandle CUOPT_cusloversp_handle; |
| 47 | CUOPT_cusloversp_handle.activate(); |
| 48 | DeviceSolverDnHandle CUOPT_cusloverdn_handle; |
| 49 | CUOPT_cusloverdn_handle.activate(); |
| 50 | DeviceSparseHandle CUOPT_sparse_handle; |
| 51 | CUOPT_sparse_handle.activate(); |
| 52 | |
| 53 | size_s n = C.dimensions[0]/3; |
| 54 | size_s o = sR.dimensions[1]; |
| 55 | |
| 56 | std::vector<int> Acellrow((5*n+1)*2*o,0); |
| 57 | std::vector<int> Acellcol((5*n+1)*2*o,0); |
| 58 | std::vector<int> AcellcolCSC(5*n+2,0); |
| 59 | std::vector<datatype> Acellval((5*n+1)*2*o,0); |
| 60 | |
| 61 | // CONSTRUCTING THE LEFT MATRIX |
| 62 | // Left = []; |
| 63 | // % new try |
| 64 | // for i = 1:order |
| 65 | // V = Acell'*sR_est(i,:)'; |
| 66 | // V = reshape(V,3*n,[]); |
| 67 | // Left = [Left;V]; |
| 68 | // end |
| 69 | size_l count = 0; |
| 70 | size_l nnz = 0; |
| 71 | for(size_s i = 0; i<3; ++i){ |
| 72 | for(size_s j = i; j<3; ++j){ |
| 73 | if(i==j){ |
| 74 | // [i,i,1] |
| 75 | for(size_s k = 0; k<o; ++k){ |
| 76 | Acellrow[nnz] = i + k*3*n; |
| 77 | Acellcol[nnz] = count; |
| 78 | Acellval[nnz] = sR.vals_host[i + k*3*n]; |
| 79 | nnz += 1; |
| 80 | } |
| 81 | }else{ |
| 82 | // [i,j,0.5] and [j,i,0.5] |
| 83 | for(size_s k = 0; k<o; ++k){ |
| 84 | Acellrow[nnz] = i + k*3*n; |
| 85 | Acellcol[nnz] = count; |
| 86 | Acellval[nnz] = sR.vals_host[j + k*3*n] * 0.5; |
| 87 | nnz += 1; |
| 88 | Acellrow[nnz] = j + k*3*n; |
| 89 | Acellcol[nnz] = count; |
| 90 | Acellval[nnz] = sR.vals_host[i + k*3*n] * 0.5; |
| 91 | nnz += 1; |
| 92 | // j >= i |
| 93 | } |
| 94 | } |
| 95 | count += 1; |
| 96 | AcellcolCSC[count] = nnz; |
| 97 | } |
| 98 | } |
| 99 |
nothing calls this directly
no test coverage detected