25 void casadi_kron_contract_outer_sparse_dense(
const T1* m,
const casadi_int* sp_m,
26 const T1* a, casadi_int mA, casadi_int nA,
27 T1* y,
const casadi_int* sp_y) {
28 casadi_int nB = sp_y[1];
29 const casadi_int* y_colind = sp_y+2;
30 const casadi_int* y_row = sp_y+2+nB+1;
31 casadi_int m_ncol = sp_m[1];
32 casadi_int mB = sp_y[0];
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[nB]; ++k) y[k] = 0;
39 for (j=0; j<nA; ++j) {
40 for (s=0; s<nB; ++s) {
42 y_col_start = y_colind[s];
43 y_col_end = y_colind[s+1];
44 if (y_col_start == y_col_end)
continue;
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] == r) { y[y_el] += a_val * m[el];
break; }
52 if (y_row[y_el] > r)
break;