Refactor islands to be memory contiguous.

PiperOrigin-RevId: 755803476
Change-Id: I41972b07e0d5ef5d0117c94f565b93367b87458b
This commit is contained in:
Yuval Tassa
2025-05-07 05:05:34 -07:00
committed by Copybara-Service
parent 449de73430
commit ecb769fc3a
30 changed files with 1742 additions and 1116 deletions
+282 -20
View File
@@ -4896,6 +4896,11 @@ STRUCTS: Mapping[str, StructDecl] = dict([
type=ValueType(name='int'),
doc='number of detected constraint islands',
),
StructFieldDecl(
name='nidof',
type=ValueType(name='int'),
doc='number of dofs in all islands',
),
StructFieldDecl(
name='time',
type=ValueType(name='mjtNum'),
@@ -5940,11 +5945,19 @@ STRUCTS: Mapping[str, StructDecl] = dict([
array_extent=('nv',),
),
StructFieldDecl(
name='island_dofnum',
name='island_nv',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='number of dofs in island',
doc='number of dofs in this island',
array_extent=('nisland',),
),
StructFieldDecl(
name='island_idofadr',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='island start address in idof vector',
array_extent=('nisland',),
),
StructFieldDecl(
@@ -5952,25 +5965,105 @@ STRUCTS: Mapping[str, StructDecl] = dict([
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='start address in island_dofind',
doc='island start address in dof vector',
array_extent=('nisland',),
),
StructFieldDecl(
name='island_dofind',
name='map_dof2idof',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='island dof indices; -1: none',
doc='map from dof to idof',
array_extent=('nv',),
),
StructFieldDecl(
name='dof_islandind',
name='map_idof2dof',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='dof island indices; -1: none',
doc='map from idof to dof; idof >= ni: unconstrained',
array_extent=('nv',),
),
StructFieldDecl(
name='ifrc_smooth',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='net unconstrained force',
array_extent=('nidof',),
),
StructFieldDecl(
name='iacc_smooth',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='unconstrained acceleration',
array_extent=('nidof',),
),
StructFieldDecl(
name='iM_rownnz',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='inertia: non-zeros in each row',
array_extent=('nidof',),
),
StructFieldDecl(
name='iM_rowadr',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='inertia: address of each row in iM_colind',
array_extent=('nidof',),
),
StructFieldDecl(
name='iM_diagnum',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='inertia: num of consecutive diagonal elements',
array_extent=('nidof',),
),
StructFieldDecl(
name='iM_colind',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='inertia: column indices of non-zeros',
array_extent=('nM',),
),
StructFieldDecl(
name='iM',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='total inertia (sparse)',
array_extent=('nM',),
),
StructFieldDecl(
name='iLD',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc="L'*D*L factorization of M (sparse)",
array_extent=('nM',),
),
StructFieldDecl(
name='iLDiagInv',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='1/diag(D)',
array_extent=('nidof',),
),
StructFieldDecl(
name='iacc',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='acceleration',
array_extent=('nidof',),
),
StructFieldDecl(
name='efc_island',
type=PointerType(
@@ -5980,7 +6073,23 @@ STRUCTS: Mapping[str, StructDecl] = dict([
array_extent=('nefc',),
),
StructFieldDecl(
name='island_efcnum',
name='island_ne',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='number of equality constraints in island',
array_extent=('nisland',),
),
StructFieldDecl(
name='island_nf',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='number of friction constraints in island',
array_extent=('nisland',),
),
StructFieldDecl(
name='island_nefc',
type=PointerType(
inner_type=ValueType(name='int'),
),
@@ -5988,19 +6097,147 @@ STRUCTS: Mapping[str, StructDecl] = dict([
array_extent=('nisland',),
),
StructFieldDecl(
name='island_efcadr',
name='island_iefcadr',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='start address in island_efcind',
doc='start address in iefc vector',
array_extent=('nisland',),
),
StructFieldDecl(
name='island_efcind',
name='map_efc2iefc',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='island constraint indices',
doc='map from efc to iefc',
array_extent=('nefc',),
),
StructFieldDecl(
name='map_iefc2efc',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='map from iefc to efc',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_type',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='constraint type (mjtConstraint)',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_id',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='id of object of specified type',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_J_rownnz',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='number of non-zeros in constraint Jacobian row',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_J_rowadr',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='row start address in colind array',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_J_rowsuper',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='number of subsequent rows in supernode',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_J_colind',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='column indices in constraint Jacobian',
array_extent=('nJ',),
),
StructFieldDecl(
name='iefc_JT_rownnz',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='number of non-zeros in constraint Jacobian row T',
array_extent=('nidof',),
),
StructFieldDecl(
name='iefc_JT_rowadr',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='row start address in colind array T',
array_extent=('nidof',),
),
StructFieldDecl(
name='iefc_JT_rowsuper',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='number of subsequent rows in supernode T',
array_extent=('nidof',),
),
StructFieldDecl(
name='iefc_JT_colind',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='column indices in constraint Jacobian T',
array_extent=('nJ',),
),
StructFieldDecl(
name='iefc_J',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='constraint Jacobian',
array_extent=('nJ',),
),
StructFieldDecl(
name='iefc_JT',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='constraint Jacobian transposed',
array_extent=('nJ',),
),
StructFieldDecl(
name='iefc_frictionloss',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='frictionloss (friction)',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_D',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='constraint mass',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_R',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='inverse constraint mass',
array_extent=('nefc',),
),
StructFieldDecl(
@@ -6060,7 +6297,23 @@ STRUCTS: Mapping[str, StructDecl] = dict([
array_extent=('nefc',),
),
StructFieldDecl(
name='efc_force',
name='iefc_aref',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='reference pseudo-acceleration',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_state',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='constraint state (mjtConstraintState)',
array_extent=('nefc',),
),
StructFieldDecl(
name='iefc_force',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
@@ -6075,6 +6328,22 @@ STRUCTS: Mapping[str, StructDecl] = dict([
doc='constraint state (mjtConstraintState)',
array_extent=('nefc',),
),
StructFieldDecl(
name='efc_force',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='constraint force in constraint space',
array_extent=('nefc',),
),
StructFieldDecl(
name='ifrc_constraint',
type=PointerType(
inner_type=ValueType(name='mjtNum'),
),
doc='constraint force',
array_extent=('nidof',),
),
StructFieldDecl(
name='threadpool',
type=ValueType(name='uintptr_t'),
@@ -8642,13 +8911,6 @@ STRUCTS: Mapping[str, StructDecl] = dict([
),
doc='',
),
StructFieldDecl(
name='island_dofind',
type=PointerType(
inner_type=ValueType(name='int'),
),
doc='',
),
StructFieldDecl(
name='dof_island',
type=PointerType(