Add nnz per row precount method for mju_sqrMatTDSparse.

PiperOrigin-RevId: 521744893
Change-Id: Ie0fbfab552a680127f4acf9041b07916f8a2a490
This commit is contained in:
Kyle Bayes
2023-04-04 06:20:32 -07:00
committed by Copybara-Service
parent 7cc42ecf2a
commit 9924cce4b7
6 changed files with 267 additions and 23 deletions
+5 -5
View File
@@ -1801,16 +1801,16 @@ void mj_projectConstraint(const mjModel* m, mjData* d) {
// construct supernodes
mju_superSparse(nefc, rowsuper, rownnz, rowadr, colind);
// AR = JM2 * JM2', uncompressed layout
// AR = JM2 * JM2'
mju_sqrMatTDSparseInit(d->efc_AR_rownnz, d->efc_AR_rowadr, JM2T, JM2,
nv, nefc, rownnzT, rowadrT, colindT, rownnz,
rowadr, colind, rowsuper, d);
mju_sqrMatTDSparse(d->efc_AR, JM2T, JM2, NULL, nv, nefc,
d->efc_AR_rownnz, d->efc_AR_rowadr, d->efc_AR_colind,
rownnzT, rowadrT, colindT, NULL,
rownnz, rowadr, colind, rowsuper, d);
// compress layout of AR
mju_compressSparse(d->efc_AR, nefc, nefc,
d->efc_AR_rownnz, d->efc_AR_rowadr, d->efc_AR_colind);
// add R to diagonal of AR
for (int i=0; i<nefc; i++) {
for (int j=0; j<d->efc_AR_rownnz[i]; j++) {