📡 Log Channels¶
Named log streams emitted by the solver (SimpleLog / logging.push / logging.mark in the C++/Rust sources). Pull a channel out of a finished session with session.get.log.numbers(name) for (x, y) pairs or session.get.log.number(name) for the latest scalar; session.get.log.stdout() / stderr() return the raw text streams. See frontend.SessionGet.
SL-toi¶
Name |
Strain-Limit Time of Impact |
Format |
list[(time, ratio)] |
Description |
Fraction in (0, 1] of the rescaled search direction that can be taken without violating the configured shell or rod strain limits, as returned by the strain-limiting line search. A value of 1.0 means strain limits never bound the step, smaller values mean the strain limiter clamped it. |
clock¶
Name |
GPU SM Clock Speed |
Format |
list[(time, MHz)] |
Description |
GPU streaming-multiprocessor clock speed in MHz, sampled from nvidia-smi once per simulation step. Useful for correlating slow steps with thermal or power-related clock throttling on the device. |
dt¶
Name |
Target Step Size |
Format |
list[(time, seconds)] |
Description |
Target integration step size in seconds at the start of this simulation step, computed as the configured dt scaled by the current playback rate. The actually advanced step size can be smaller (see the Final Step Size channel) if the line search reduces it. |
dyn-consumed¶
Name |
Dynamic Hessian Memory Usage Ratio |
Format |
list[(time, ratio)] |
Description |
Fraction of the pre-allocated dynamic contact-Hessian GPU buffer actually used during matrix assembly, as a value in [0, 1]. If this ratio reaches 1.0, the solver is out of space for new contact entries and the simulation will fail. Monitor this to size csrmat_max_nnz correctly. Only contact contributions count against this budget, not elastic or inertia terms. |
final-dt¶
Name |
Final Step Size |
Format |
list[(time, seconds)] |
Description |
Step size in seconds that was actually integrated this simulation step. In easy cases this matches the target dt, but it is reduced by the advanced TOI fraction when contacts or strain limits shorten the step, and can also be reduced when enable_retry is on and the PCG solve fails. |
frame-to-time¶
Name |
Video Frame to Simulation Time Map |
Format |
list[(frame, seconds)] |
Description |
Pairs of (video frame index, simulation time in seconds) emitted once per output frame. Lets you look up which simulation time each output frame corresponds to, which is useful when the playback rate varies over time. |
initial-check-intersection¶
Name |
Initial Intersection Check Time |
Format |
list[(time, ms)] |
Description |
Wall-clock time in milliseconds spent scanning the previous and current vertex positions for self-intersections at the start of the simulation. Only a single record is expected. Useful for diagnosing geometry that begins the simulation already tangled. |
initial-lbvh-build¶
Name |
Initial LBVH Build Time |
Format |
list[(time, ms)] |
Description |
Wall-clock time in milliseconds to build the initial LBVH (Linear Bounding Volume Hierarchy) over faces, edges, and vertices at the start of the simulation, including the collision-mesh BVH. Only a single record is expected. |
initialize¶
Name |
Initialization Time |
Format |
list[(time, ms)] |
Description |
Total wall-clock time in milliseconds spent inside the one-time solver initialization (buffer allocation, contact setup, initial LBVH build, initial intersection check). Only a single record is expected, written when the initialize scope exits. The leading time column is the simulation time at the moment of recording, which is 0 for initialization. |
lbvh-build¶
Name |
LBVH Build Time |
Format |
list[(time, ms)] |
Description |
Wall-clock time in milliseconds to rebuild the LBVH (Linear Bounding Volume Hierarchy) over faces, edges, and vertices at the start of each simulation step. This BVH underpins broad-phase contact detection, so this cost tracks mesh size and how often primitives are deactivated by collision windows. |
line-search¶
Name |
Line Search Time |
Format |
list[(time, ms)] |
Description |
Wall-clock time in milliseconds spent in the per-iteration line search, which runs continuous collision detection (CCD) plus strain-limit CCD to find the largest feasible substep along the rescaled search direction. One entry per Newton iteration. |
matrix-assembly¶
Name |
Matrix Assembly Time |
Format |
list[(time, ms)] |
Description |
Wall-clock time in milliseconds spent assembling the global system matrix and right-hand side for the Newton linear solve, including inertia, elastic, stitch, strain-limiting, and contact contributions. One entry per Newton iteration. |
max-nnz-row¶
Name |
Max Non-Zero Entries Per Contact Matrix Row |
Format |
list[(time, count)] |
Description |
Largest number of non-zero block entries found in any single row of the dynamic contact Hessian for this Newton iteration. Rows grow wider when a vertex is in contact with many primitives at once. Useful as a diagnostic for crowded contact regions and for sizing the per-row capacity of the dynamic CSR buffer. |
max-search-dir¶
Name |
Max Search Direction Magnitude |
Format |
list[(time, meters)] |
Description |
Maximum per-vertex magnitude (L2 norm) of the Newton search direction returned by the linear solve for this Newton iteration, in meters. Compared against the max_dx parameter to decide whether the search direction must be rescaled before the line search. |
max-sigma¶
Name |
Max Stretch Ratio |
Format |
list[(time, ratio)] |
Description |
Maximum stretch ratio among all shell faces and rod edges in the scene, measured at the start of the step before the Newton loop. For shells this is the largest singular value of the deformation gradient (scaled by the shrink factor), for rods it is the current edge length divided by its rest length. A value of 1.02 means a 2 percent stretch. Useful for diagnosing strain-limit tightness. |
max-velocity¶
Name |
Max Vertex Velocity |
Format |
list[(time, m/s)] |
Description |
Maximum speed (in meters per second) among all non-pinned vertices, measured from the previous to the current positions at the start of the step. Pinned (fixed) vertices are excluded. Useful for spotting explosions or abrupt motion in the simulation. |
newton-steps¶
Name |
Newton Iteration Count |
Format |
list[(time, iterations)] |
Description |
Number of Newton iterations consumed in this simulation step (before the trailing error-reduction iteration). Values above the configured min_newton_steps indicate the solver needed extra iterations to reach the target advanced step size. |
num-contact¶
Name |
Total Contact Count |
Format |
list[(time, count)] |
Description |
Total number of active contact and constraint pairs assembled into the system matrix for this Newton iteration, summed across self-contact, collision-mesh contact, and analytic constraints (sphere, floor). A useful proxy for how crowded the collision scene is at this iteration. |
pcg-iter¶
Name |
Linear Solve Iteration Count |
Format |
list[(time, iterations)] |
Description |
Number of preconditioned conjugate gradient (PCG) iterations consumed during the linear solve for this Newton iteration. High values indicate an ill-conditioned system or a tight tolerance and often correlate with long linear-solve times. |
pcg-linsolve¶
Name |
Linear Solve Time |
Format |
list[(time, ms)] |
Description |
Wall-clock time in milliseconds spent in the preconditioned conjugate gradient (PCG) linear solve for the Newton step direction. One entry per Newton iteration. Typically the dominant per-iteration cost. |
pcg-resid¶
Name |
Linear Solve Relative Residual |
Format |
list[(time, ratio)] |
Description |
Final relative residual reached by the PCG linear solve for this Newton iteration. When this stays well below the configured tolerance, the solve converged cleanly, values close to the tolerance indicate the iteration cap was hit. |
playback¶
Name |
Playback Speed |
Format |
list[(time, ratio)] |
Description |
Playback rate applied this step, as a multiplier on the configured dt. A value of 1.0 means real-time playback, below 1.0 slows motion down, and above 1.0 speeds it up. The value can change between steps when the scene scripts playback over time. |
time-per-frame¶
Emulated mode |
apply the constraint’s kinematic positions |
Name |
Time Per Video Frame |
Format |
list[(frame, ms)] |
Description |
Wall-clock time in milliseconds elapsed between producing the previous output video frame and this one. Because each simulation step can advance less than one frame’s worth of time, this aggregates however many solver steps were needed to cross the frame boundary. |
time-per-step¶
Name |
Time Per Simulation Step |
Format |
list[(time, ms)] |
Description |
Wall-clock time in milliseconds spent inside a single advance call (one simulation step). Note that a step does not advance by a fixed dt: the actual step size is reduced by the accumulated time of impact found during the inner Newton loop, so these values also reflect how hard the solver had to work to progress the step. |
toi¶
Name |
Line Search Time of Impact |
Format |
list[(time, ratio)] |
Description |
Fraction in (0, 1] of the rescaled Newton search direction that can be taken without causing a collision or violating strain limits, as the minimum of the contact CCD result and the strain-limit TOI. A value of 1.0 means the full Newton step was accepted, smaller values mean the line search cut it short. |
toi-advanced¶
Name |
Advanced Fractional Step Size |
Format |
list[(time, ratio)] |
Description |
Fraction in (0, 1] of the target step size that the Newton loop actually advanced, accumulated across all its iterations. The final Final Step Size equals this fraction times the target dt. A value of 1.0 means the full target step completed, smaller values mean contacts or strain limits forced a partial step. |
toi-recale¶
Name |
Search Direction Rescale Factor |
Format |
list[(time, ratio)] |
Description |
Scalar in (0, 1] applied to the Newton search direction before the line search, so that no per-vertex displacement exceeds the configured max_dx. A value of 1.0 means the direction was already within budget, smaller values clamp an over-eager step. |