Refactor constraint island representation.
Required for constraint solver islanding.
Replace linked lists with `island_{dof,efc}_{num,adr,ind}`, corresponding to the standard `{rownnz,rowadr,colind}` sparse matrix representation. By effectively defining two sparse matrix structures of dimensions `nisland x nv` and `nisland x nefc`, respectively, this representation is more conducive to reuse of existing sparse matrix utility functions, while being cache-friendlier by making sequential indices adjacent in memory.
PiperOrigin-RevId: 559704957
Change-Id: I919362cbef0d5fe5acc4aa2bb4ffb17eee8223a2
This commit is contained in:
committed by
Copybara-Service
parent
b92a9d599c
commit
1dad5993f0
@@ -372,12 +372,14 @@ struct mjData_ {
|
||||
int* tendon_efcadr; // first efc address involving tendon; -1: none (ntendon x 1)
|
||||
|
||||
// computed by mj_island
|
||||
int* island_dofadr; // address of first dof in island (nisland x 1)
|
||||
int* island_efcadr; // address of first constraint in island (nisland x 1)
|
||||
int* dof_island; // island id of this dof; -1: none (nv x 1)
|
||||
int* dof_islandnext; // address of next dof in island; -1: last or none (nv x 1)
|
||||
int* island_dofnum; // number of dofs in island (nisland x 1)
|
||||
int* island_dofadr; // start address in island_dofind (nisland x 1)
|
||||
int* island_dofind; // island dof indices; -1: none (nv x 1)
|
||||
int* efc_island; // island id of this constraint (nefc x 1)
|
||||
int* efc_islandnext; // address of next constraint in island; -1: last (nefc x 1)
|
||||
int* island_efcnum; // number of constraints in island (nisland x 1)
|
||||
int* island_efcadr; // start address in island_efcind (nisland x 1)
|
||||
int* island_efcind; // island constraint indices (nefc x 1)
|
||||
|
||||
// computed by mj_projectConstraint (dual solver)
|
||||
int* efc_AR_rownnz; // number of non-zeros in AR (nefc x 1)
|
||||
|
||||
Reference in New Issue
Block a user