📡 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.

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.