newton.solvers.SemiImplicitSolver#
- class newton.solvers.SemiImplicitSolver(model, angular_damping=0.05, friction_smoothing=1.0, joint_attach_ke=1.0e4, joint_attach_kd=1.0e2)#
A semi-implicit integrator using symplectic Euler
After constructing Model and State objects this time-integrator may be used to advance the simulation state forward in time.
Semi-implicit time integration is a variational integrator that preserves energy, however it not unconditionally stable, and requires a time-step small enough to support the required stiffness and damping forces.
See: https://en.wikipedia.org/wiki/Semi-implicit_Euler_method
Example
solver = newton.solvers.SemiImplicitSolver(model) # simulation loop for i in range(100): solver.step(model, state_in, state_out, control, contacts, dt)
Methods
__init__
(model[, angular_damping, ...])Create a new Euler solver.
integrate_bodies
(model, state_in, state_out, dt)Integrate the rigid bodies of the model.
integrate_particles
(model, state_in, ...)Integrate the particles of the model.
notify_model_changed
(flags)Notify the solver that parts of the
Model
were modified.Attributes
Get the device used by the solver.
- __init__(model, angular_damping=0.05, friction_smoothing=1.0, joint_attach_ke=1.0e4, joint_attach_kd=1.0e2)#
Create a new Euler solver.
- Parameters:
model (Model) – Model to use by this solver.
angular_damping (float, optional) – Angular damping factor to be used in rigid body integration. Defaults to 0.05.
friction_smoothing (float, optional) – Huber norm delta used for friction velocity normalization (see
warp.math.norm_huber()
). Defaults to 1.0.joint_attach_ke (float, optional) – Joint attachment spring stiffness. Defaults to 1.0e4.
joint_attach_kd (float, optional) – Joint attachment spring damping. Defaults to 1.0e2.
- step(model, state_in, state_out, control, contacts, dt)#
Simulate the model for a given time step using the given control input.
- Parameters:
model (Model) – The model to simulate.
state_in (State) – The input state.
state_out (State) – The output state.
control (Control) – The control input. Defaults to None which means the control values from the
Model
are used.contacts (Contact) – The contact information.
dt (float) – The time step (typically in seconds).
- property device: Device#
Get the device used by the solver.
- Returns:
The device used by the solver.
- Return type:
wp.Device
- integrate_bodies(model, state_in, state_out, dt, angular_damping=0.0)#
Integrate the rigid bodies of the model.
- integrate_particles(model, state_in, state_out, dt)#
Integrate the particles of the model.
- notify_model_changed(flags)#
Notify the solver that parts of the
Model
were modified.The flags argument is a bit-mask composed of the
NOTIFY_FLAG_*
constants defined innewton.core.types
. Each flag represents a category of model data that may have been updated after the solver was created. Passing the appropriate combination of flags enables a solver implementation to refresh its internal buffers without having to recreate the whole solver object. Valid flags are:Constant
Description
NOTIFY_FLAG_JOINT_PROPERTIES
Joint transforms or coordinates have changed.
NOTIFY_FLAG_JOINT_AXIS_PROPERTIES
Joint axis limits, targets, or modes have changed.
NOTIFY_FLAG_DOF_PROPERTIES
Joint DOF state or force buffers have changed.
NOTIFY_FLAG_BODY_PROPERTIES
Rigid-body pose or velocity buffers have changed.
NOTIFY_FLAG_BODY_INERTIAL_PROPERTIES
Rigid-body mass or inertia tensors have changed.
NOTIFY_FLAG_SHAPE_PROPERTIES
Shape transforms or geometry have changed.
- Parameters:
flags (int) – Bit-mask of model-update flags indicating which model properties changed.