26 void casadi_kron_contract_inner_sparse_dense(
const T1* m,
const casadi_int* sp_m,
27 const T1* b, casadi_int mB, casadi_int nB,
28 T1* y,
const casadi_int* sp_y) {
29 casadi_int nA = sp_y[1];
30 const casadi_int* y_colind = sp_y+2;
31 const casadi_int* y_row = sp_y+2+nA+1;
32 casadi_int m_ncol = sp_m[1];
33 const casadi_int* m_colind = sp_m+2;
34 const casadi_int* m_row = sp_m+2+m_ncol+1;
35 casadi_int cc, j, s, el, rr, i, r, y_el, y_col_start, y_col_end, k;
37 for (k=0; k<y_colind[nA]; ++k) y[k] = 0;
39 for (j=0; j<nA; ++j) {
40 y_col_start = y_colind[j];
41 y_col_end = y_colind[j+1];
42 if (y_col_start == y_col_end)
continue;
43 for (s=0; s<nB; ++s) {
45 for (el=m_colind[cc]; el<m_colind[cc+1]; ++el) {
50 for (y_el=y_col_start; y_el<y_col_end; ++y_el) {
51 if (y_row[y_el] == i) { y[y_el] += m[el] * b_val;
break; }
52 if (y_row[y_el] > i)
break;