Switch mjData.{qH,qLD} from reduced ("C") to full ("M") inertia matrix structure. No performance impact of extra zeros because of existing "simple dof" skipping mechanism.
PiperOrigin-RevId: 733523931 Change-Id: Ic8d8a152dda5532331c239cb6b4ce7d8d09b7fff
This commit is contained in:
committed by
Copybara-Service
parent
51f6aa8b43
commit
0f563ecf31
@@ -1097,14 +1097,14 @@ void mj_mulM2(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum* vec)
|
||||
|
||||
// non-simple: add off-diagonals
|
||||
if (!m->dof_simplenum[i]) {
|
||||
int adr = d->C_rowadr[i];
|
||||
res[i] += mju_dotSparse(qLD+adr, vec, d->C_rownnz[i] - 1, d->C_colind+adr, /*flg_unc1=*/0);
|
||||
int adr = d->M_rowadr[i];
|
||||
res[i] += mju_dotSparse(qLD+adr, vec, d->M_rownnz[i] - 1, d->M_colind+adr, /*flg_unc1=*/0);
|
||||
}
|
||||
}
|
||||
|
||||
// res *= sqrt(D)
|
||||
for (int i=0; i < nv; i++) {
|
||||
int diag = d->C_rowadr[i] + d->C_rownnz[i] - 1;
|
||||
int diag = d->M_rowadr[i] + d->M_rownnz[i] - 1;
|
||||
res[i] *= mju_sqrt(qLD[diag]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user