Remove transposed Jacobian fields from mjData
No longer computed unconditionally, only ad-hoc where required. PiperOrigin-RevId: 797753297 Change-Id: I2030fc342c98ff33575b0526dd72e2110c4fcb74
This commit is contained in:
committed by
Copybara-Service
parent
5fe4224ae7
commit
2f28473bc1
@@ -386,10 +386,10 @@ void mj_mulJacTVec(const mjModel* m, const mjData* d, mjtNum* res, const mjtNum*
|
||||
}
|
||||
|
||||
// sparse Jacobian
|
||||
if (mj_isSparse(m))
|
||||
mju_mulMatVecSparse(res, d->efc_JT, vec, m->nv,
|
||||
d->efc_JT_rownnz, d->efc_JT_rowadr,
|
||||
d->efc_JT_colind, d->efc_JT_rowsuper);
|
||||
if (mj_isSparse(m)) {
|
||||
mju_mulMatTVecSparse(res, d->efc_J, vec, d->nefc, m->nv,
|
||||
d->efc_J_rownnz, d->efc_J_rowadr, d->efc_J_colind);
|
||||
}
|
||||
|
||||
// dense Jacobian
|
||||
else {
|
||||
@@ -1996,12 +1996,6 @@ void mj_makeConstraint(const mjModel* m, mjData* d) {
|
||||
|
||||
// transpose sparse Jacobian, make row supernodes
|
||||
if (mj_isSparse(m)) {
|
||||
// transpose
|
||||
mju_transposeSparse(d->efc_JT, d->efc_J, d->nefc, m->nv,
|
||||
d->efc_JT_rownnz, d->efc_JT_rowadr, d->efc_JT_colind, d->efc_JT_rowsuper,
|
||||
d->efc_J_rownnz, d->efc_J_rowadr, d->efc_J_colind);
|
||||
|
||||
|
||||
#ifdef mjUSEAVX
|
||||
// compute supernodes of J; used by mju_mulMatVecSparse_avx
|
||||
mju_superSparse(d->nefc, d->efc_J_rowsuper,
|
||||
|
||||
@@ -597,20 +597,6 @@ void mj_island(const mjModel* m, mjData* d) {
|
||||
mju_superSparse(d->island_nefc[island], d->iefc_J_rowsuper + adr,
|
||||
d->iefc_J_rownnz + adr, d->iefc_J_rowadr + adr, d->iefc_J_colind);
|
||||
}
|
||||
|
||||
// block-diagonalize Jacobian-transpose
|
||||
mju_blockDiagSparse(d->iefc_JT, d->iefc_JT_rownnz, d->iefc_JT_rowadr, d->iefc_JT_colind,
|
||||
d->efc_JT, d->efc_JT_rownnz, d->efc_JT_rowadr, d->efc_JT_colind,
|
||||
nidof, nisland,
|
||||
d->map_idof2dof, d->map_efc2iefc,
|
||||
d->island_idofadr, d->island_iefcadr, NULL, NULL);
|
||||
|
||||
// recompute rowsuper per island
|
||||
for (int island=0; island < nisland; island++) {
|
||||
int adr = d->island_idofadr[island];
|
||||
mju_superSparse(d->island_nv[island], d->iefc_JT_rowsuper + adr,
|
||||
d->iefc_JT_rownnz + adr, d->iefc_JT_rowadr + adr, d->iefc_JT_colind);
|
||||
}
|
||||
}
|
||||
|
||||
// copy position-dependent efc vectors required by solver
|
||||
|
||||
@@ -1236,8 +1236,6 @@ void mj_printFormattedData(const mjModel* m, const mjData* d, const char* filena
|
||||
printArrayInt("EFC_J_ROWADR", d->nefc, 1, d->efc_J_rowadr, fp);
|
||||
printSparse("EFC_J", d->efc_J, d->nefc, d->efc_J_rownnz,
|
||||
d->efc_J_rowadr, d->efc_J_colind, fp, float_format);
|
||||
mj_printSparsity("JT: constraint Jacobian transposed", m->nv, d->nefc, d->efc_JT_rowadr, NULL,
|
||||
d->efc_JT_rownnz, d->efc_JT_rowsuper, d->efc_JT_colind, fp);
|
||||
if (mj_isDual(m)) {
|
||||
printArrayInt("EFC_AR_ROWNNZ", d->nefc, 1, d->efc_AR_rownnz, fp);
|
||||
printArrayInt("EFC_AR_ROWADR", d->nefc, 1, d->efc_AR_rowadr, fp);
|
||||
|
||||
Reference in New Issue
Block a user