diff --git a/simulate/simulate.cc b/simulate/simulate.cc index d6a5f80e..a266c57a 100644 --- a/simulate/simulate.cc +++ b/simulate/simulate.cc @@ -299,7 +299,7 @@ void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) { memset(sim->figcost.linepnt, 0, mjMAXLINE*sizeof(int)); // number of islands that have diagnostics - int nisland = mjMAX(1, mjMIN(d->nisland, mjNISLAND)); + int nisland = d->nefc ? mjMAX(1, mjMIN(d->nisland, mjNISLAND)) : 0; // iterate over islands for (int k=0; k < nisland; k++) { @@ -403,9 +403,10 @@ void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) { mjtNum sqrt_nnz = 0; int solver_niter = 0; for (int island=0; island < nisland; island++) { - sqrt_nnz += mju_sqrt(d->solver_nnz[island]); + sqrt_nnz += d->solver_nnz[island]; solver_niter += d->solver_niter[island]; } + sqrt_nnz = mju_sqrt(sqrt_nnz); // get sizes: nv, nbody, nefc, sqrt(nnz), ncont, iter float sdata[6] = { diff --git a/src/experimental/studio/app.cc b/src/experimental/studio/app.cc index a214a092..5b3ff75a 100644 --- a/src/experimental/studio/app.cc +++ b/src/experimental/studio/app.cc @@ -634,14 +634,15 @@ void App::UpdateProfilerData() { cpu_other_.erase(cpu_other_.begin()); cpu_other_.push_back(other); - // Dimensions. + // Solver diagnostics. mjtNum sqrt_nnz = 0; int solver_niter = 0; - const int nisland = mjMAX(1, mjMIN(Data()->nisland, mjNISLAND)); - for (int island = 0; island < nisland; island++) { - sqrt_nnz += mju_sqrt(Data()->solver_nnz[island]); + const int nisland = Data()->nefc ? mjMAX(1, mjMIN(Data()->nisland, mjNISLAND)) : 0; + for (int island=0; island < nisland; island++) { + sqrt_nnz += Data()->solver_nnz[island]; solver_niter += Data()->solver_niter[island]; } + sqrt_nnz = mju_sqrt(sqrt_nnz); dim_dof_.erase(dim_dof_.begin()); dim_dof_.push_back(Model()->nv);