Rejigged solver statistics in preparation for islanding.
- See public description below. - Stopped incrementing the iteration count in saveStats(). - `sizeof(mjSolverStat) == 40`, so this ends up costing 160KB, up from 40KB. BEGIN_PUBLIC Changed the size of `mjData.solver`, the structure used to collect solver diagnostic information. The array is now of length `mjNISLAND * mjNSOLVER`, where each row of length `mjNSOLVER` contains separate solver statistics for each constraint island. Until solver islanding is implemented, only row 0 is used. - The new constant `mjNISLAND` is set to 20. - `mjNSOLVER` is reduced from 1000 to 200. - Added `mjData.solver_nisland`, the number of islands for which the solver ran. - `mjData.solver_niter` (renamed from mjData.solver_iter) and `mjData.solver_nnz` are now integer vectors of length `mjNISLAND`. END_PUBLIC PiperOrigin-RevId: 565030093 Change-Id: I773e918805c6ced79f0dab5f19ea23956760c8c5
This commit is contained in:
committed by
Copybara-Service
parent
8faf47dd16
commit
86d8b912f4
@@ -1212,11 +1212,17 @@ void mj_solveM(const mjModel* m, mjData* d, mjtNum* x, const mjtNum* y, int n) {
|
||||
// in-place sparse backsubstitution for one island: x = inv(L'*D*L)*x
|
||||
// L is in lower triangle of qLD; D is on diagonal of qLD
|
||||
void mj_solveM_island(const mjModel* m, const mjData* d, mjtNum* restrict x, int island) {
|
||||
// if no islands, call mj_solveLD
|
||||
const mjtNum* qLD = d->qLD;
|
||||
const mjtNum* qLDiagInv = d->qLDiagInv;
|
||||
if (island < 0) {
|
||||
mj_solveLD(m, x, 1, qLD, qLDiagInv);
|
||||
return;
|
||||
}
|
||||
|
||||
// local constants: general
|
||||
const int* Madr = m->dof_Madr;
|
||||
const int* parentid = m->dof_parentid;
|
||||
const mjtNum* qLD = d->qLD;
|
||||
const mjtNum* qLDiagInv = d->qLDiagInv;
|
||||
const int* simplenum = m->dof_simplenum;
|
||||
|
||||
// local constants: island specific
|
||||
|
||||
Reference in New Issue
Block a user