MCPcopy Create free account
hub / github.com/ComputationalRobotics/XM-code / checkeig

Function checkeig

XM/include/XM/checkeig.h:42–388  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40}
41
42bool 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

Callers

nothing calls this directly

Calls 7

CSC2CSRFunction · 0.85
DnMatDnMatFunction · 0.85
single_eig_cusolverFunction · 0.85
activateMethod · 0.45

Tested by

no test coverage detected