diff --git a/doc/includes/references.h b/doc/includes/references.h index b7a32e40..546299d7 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -169,7 +169,7 @@ struct mjData_ { int nf; // number of friction constraints int nl; // number of limit constraints int nefc; // number of constraints - int nnzJ; // number of non-zeros in constraint Jacobian + int nJ; // number of non-zeros in constraint Jacobian int nisland; // number of detected constraint islands // global properties @@ -361,13 +361,13 @@ struct mjData_ { int* efc_J_rownnz; // number of non-zeros in constraint Jacobian row (nefc x 1) int* efc_J_rowadr; // row start address in colind array (nefc x 1) int* efc_J_rowsuper; // number of subsequent rows in supernode (nefc x 1) - int* efc_J_colind; // column indices in constraint Jacobian (nnzJ x 1) + int* efc_J_colind; // column indices in constraint Jacobian (nJ x 1) int* efc_JT_rownnz; // number of non-zeros in constraint Jacobian row T (nv x 1) int* efc_JT_rowadr; // row start address in colind array T (nv x 1) int* efc_JT_rowsuper; // number of subsequent rows in supernode T (nv x 1) - int* efc_JT_colind; // column indices in constraint Jacobian T (nnzJ x 1) - mjtNum* efc_J; // constraint Jacobian (nnzJ x 1) - mjtNum* efc_JT; // constraint Jacobian transposed (nnzJ x 1) + int* efc_JT_colind; // column indices in constraint Jacobian T (nJ x 1) + mjtNum* efc_J; // constraint Jacobian (nJ x 1) + mjtNum* efc_JT; // constraint Jacobian transposed (nJ x 1) mjtNum* efc_pos; // constraint position (equality, contact) (nefc x 1) mjtNum* efc_margin; // inclusion margin (contact) (nefc x 1) mjtNum* efc_frictionloss; // frictionloss (friction) (nefc x 1) diff --git a/include/mujoco/mjdata.h b/include/mujoco/mjdata.h index 44342c90..96b37acc 100644 --- a/include/mujoco/mjdata.h +++ b/include/mujoco/mjdata.h @@ -197,7 +197,7 @@ struct mjData_ { int nf; // number of friction constraints int nl; // number of limit constraints int nefc; // number of constraints - int nnzJ; // number of non-zeros in constraint Jacobian + int nJ; // number of non-zeros in constraint Jacobian int nisland; // number of detected constraint islands // global properties @@ -389,13 +389,13 @@ struct mjData_ { int* efc_J_rownnz; // number of non-zeros in constraint Jacobian row (nefc x 1) int* efc_J_rowadr; // row start address in colind array (nefc x 1) int* efc_J_rowsuper; // number of subsequent rows in supernode (nefc x 1) - int* efc_J_colind; // column indices in constraint Jacobian (nnzJ x 1) + int* efc_J_colind; // column indices in constraint Jacobian (nJ x 1) int* efc_JT_rownnz; // number of non-zeros in constraint Jacobian row T (nv x 1) int* efc_JT_rowadr; // row start address in colind array T (nv x 1) int* efc_JT_rowsuper; // number of subsequent rows in supernode T (nv x 1) - int* efc_JT_colind; // column indices in constraint Jacobian T (nnzJ x 1) - mjtNum* efc_J; // constraint Jacobian (nnzJ x 1) - mjtNum* efc_JT; // constraint Jacobian transposed (nnzJ x 1) + int* efc_JT_colind; // column indices in constraint Jacobian T (nJ x 1) + mjtNum* efc_J; // constraint Jacobian (nJ x 1) + mjtNum* efc_JT; // constraint Jacobian transposed (nJ x 1) mjtNum* efc_pos; // constraint position (equality, contact) (nefc x 1) mjtNum* efc_margin; // inclusion margin (contact) (nefc x 1) mjtNum* efc_frictionloss; // frictionloss (friction) (nefc x 1) diff --git a/include/mujoco/mjxmacro.h b/include/mujoco/mjxmacro.h index a47a0a32..796b6c5a 100644 --- a/include/mujoco/mjxmacro.h +++ b/include/mujoco/mjxmacro.h @@ -689,13 +689,13 @@ X( int, efc_J_rownnz, MJ_D(nefc), 1 ) \ X( int, efc_J_rowadr, MJ_D(nefc), 1 ) \ X( int, efc_J_rowsuper, MJ_D(nefc), 1 ) \ - X( int, efc_J_colind, MJ_D(nnzJ), 1 ) \ + X( int, efc_J_colind, MJ_D(nJ), 1 ) \ X( int, efc_JT_rownnz, MJ_M(nv), 1 ) \ X( int, efc_JT_rowadr, MJ_M(nv), 1 ) \ X( int, efc_JT_rowsuper, MJ_M(nv), 1 ) \ - X( int, efc_JT_colind, MJ_D(nnzJ), 1 ) \ - X( mjtNum, efc_J, MJ_D(nnzJ), 1 ) \ - X( mjtNum, efc_JT, MJ_D(nnzJ), 1 ) \ + X( int, efc_JT_colind, MJ_D(nJ), 1 ) \ + X( mjtNum, efc_J, MJ_D(nJ), 1 ) \ + X( mjtNum, efc_JT, MJ_D(nJ), 1 ) \ X( mjtNum, efc_pos, MJ_D(nefc), 1 ) \ X( mjtNum, efc_margin, MJ_D(nefc), 1 ) \ X( mjtNum, efc_frictionloss, MJ_D(nefc), 1 ) \ @@ -755,7 +755,7 @@ X( int, nf ) \ X( int, nl ) \ X( int, nefc ) \ - X( int, nnzJ ) \ + X( int, nJ ) \ X( int, nisland ) \ X( mjtNum, time ) \ X( uintptr_t, threadpool ) diff --git a/introspect/structs.py b/introspect/structs.py index c8993c31..0d5107fd 100644 --- a/introspect/structs.py +++ b/introspect/structs.py @@ -4692,7 +4692,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ doc='number of constraints', ), StructFieldDecl( - name='nnzJ', + name='nJ', type=ValueType(name='int'), doc='number of non-zeros in constraint Jacobian', ), @@ -5588,7 +5588,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ inner_type=ValueType(name='int'), ), doc='column indices in constraint Jacobian', - array_extent=('nnzJ',), + array_extent=('nJ',), ), StructFieldDecl( name='efc_JT_rownnz', @@ -5616,7 +5616,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ type=PointerType( inner_type=ValueType(name='int'), ), - doc='column indices in constraint Jacobian T (nnzJ x 1)', # pylint: disable=line-too-long + doc='column indices in constraint Jacobian T (nJ x 1)', # pylint: disable=line-too-long ), StructFieldDecl( name='efc_J', @@ -5624,7 +5624,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ inner_type=ValueType(name='mjtNum'), ), doc='constraint Jacobian', - array_extent=('nnzJ',), + array_extent=('nJ',), ), StructFieldDecl( name='efc_JT', @@ -5632,7 +5632,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ inner_type=ValueType(name='mjtNum'), ), doc='constraint Jacobian transposed', - array_extent=('nnzJ',), + array_extent=('nJ',), ), StructFieldDecl( name='efc_pos', diff --git a/mjx/mujoco/mjx/_src/io.py b/mjx/mujoco/mjx/_src/io.py index 893e7cb1..00ba75e5 100644 --- a/mjx/mujoco/mjx/_src/io.py +++ b/mjx/mujoco/mjx/_src/io.py @@ -408,7 +408,7 @@ def get_data_into( ncon = (d_i.contact.dist <= 0).sum() efc_active = (d_i.efc_J != 0).any(axis=1) nefc = int(efc_active.sum()) - result_i.nnzJ = nefc * m.nv + result_i.nJ = nefc * m.nv if ncon != result_i.ncon or nefc != result_i.nefc: mujoco._functions._realloc_con_efc(result_i, ncon=ncon, nefc=nefc) # pylint: disable=protected-access result_i.efc_J_rownnz[:] = np.repeat(m.nv, nefc) diff --git a/python/mujoco/structs.cc b/python/mujoco/structs.cc index 0c97081e..56a6c8ee 100644 --- a/python/mujoco/structs.cc +++ b/python/mujoco/structs.cc @@ -747,7 +747,7 @@ void MjDataWrapper::Serialize(std::ostream& output) const { X(ncon); X(ne); X(nf); - X(nnzJ); + X(nJ); X(nefc); X(nisland); X(time); @@ -824,7 +824,7 @@ MjDataWrapper MjDataWrapper::Deserialize(std::istream& input) { X(ncon); X(ne); X(nf); - X(nnzJ); + X(nJ); X(nefc); X(nisland); X(time); diff --git a/src/engine/engine_core_constraint.c b/src/engine/engine_core_constraint.c index dc2a7658..2c62248a 100644 --- a/src/engine/engine_core_constraint.c +++ b/src/engine/engine_core_constraint.c @@ -1943,7 +1943,7 @@ static int mj_nc(const mjModel* m, mjData* d, int* nnz) { // driver: call all functions above void mj_makeConstraint(const mjModel* m, mjData* d) { // clear sizes - d->ne = d->nf = d->nl = d->nefc = d->nnzJ = 0; + d->ne = d->nf = d->nl = d->nefc = d->nJ = 0; // disabled or Jacobian not allocated: return if (mjDISABLED(mjDSBL_CONSTRAINT)) { @@ -1951,13 +1951,13 @@ void mj_makeConstraint(const mjModel* m, mjData* d) { } // precount sizes for constraint Jacobian matrices - int *nnz = mj_isSparse(m) ? &(d->nnzJ) : NULL; + int *nnz = mj_isSparse(m) ? &(d->nJ) : NULL; int ne_allocated = mj_ne(m, d, nnz); int nf_allocated = mj_nf(m, d, nnz); int nl_allocated = mj_nl(m, d, nnz); int nefc_allocated = ne_allocated + nf_allocated + nl_allocated + mj_nc(m, d, nnz); if (!mj_isSparse(m)) { - d->nnzJ = nefc_allocated * m->nv; + d->nJ = nefc_allocated * m->nv; } d->nefc = nefc_allocated; @@ -1998,12 +1998,11 @@ void mj_makeConstraint(const mjModel* m, mjData* d) { mjERROR("nefc mis-allocation: found nefc=%d but allocated %d", d->nefc, nefc_allocated); } - // check that nnzJ was computed correctly + // check that nJ was computed correctly if (d->nefc > 0) { - int nnzJ = d->efc_J_rownnz[d->nefc - 1] + d->efc_J_rowadr[d->nefc - 1]; - if (d->nnzJ != nnzJ) { - mjERROR("constraint Jacobian mis-allocation: found nnzJ=%d but allocated %d", - nnzJ, d->nnzJ); + int nJ = d->efc_J_rownnz[d->nefc - 1] + d->efc_J_rowadr[d->nefc - 1]; + if (d->nJ != nJ) { + mjERROR("constraint Jacobian mis-allocation: found nJ=%d but allocated %d", nJ, d->nJ); } } } else if (d->nefc > nefc_allocated) { diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index 88ca9bd2..6891da68 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -1815,7 +1815,7 @@ static void _resetData(const mjModel* m, mjData* d, unsigned char debug_value) { d->nf = 0; d->nl = 0; d->nefc = 0; - d->nnzJ = 0; + d->nJ = 0; d->nisland = 0; // clear global properties diff --git a/test/engine/engine_io_test.cc b/test/engine/engine_io_test.cc index fc38adc7..7b65de4a 100644 --- a/test/engine/engine_io_test.cc +++ b/test/engine/engine_io_test.cc @@ -156,7 +156,7 @@ TEST_F(EngineIoTest, ResetVariableSizes) { EXPECT_EQ(data->ne, 0); EXPECT_EQ(data->nf, 0); EXPECT_EQ(data->nefc, 0); - EXPECT_EQ(data->nnzJ, 0); + EXPECT_EQ(data->nJ, 0); EXPECT_EQ(data->ncon, 0); mj_deleteData(data); diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index 262be737..906c2c7f 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -4851,7 +4851,7 @@ public unsafe struct mjData_ { public int nf; public int nl; public int nefc; - public int nnzJ; + public int nJ; public int nisland; public double time; public fixed double energy[2];