Node RigidInertialMidpointNode#

Defined in mime.nodes.body._rigid_inertial.RigidInertialMidpointNode.

Algorithm MIME-NODE-112.

A rigid body with the gyroscopic term linearly implicit at the midpoint: Newton’s and Euler’s equations for its centre of mass, every delivered resistance integrated implicitly, the pose turned by the exponential of the new rate. Torque-free it keeps the kinetic energy and the magnitude of the angular momentum to second order in the step.

Governing equations#

\[ \mathbf{V}^{\prime} = \mathbf{V} + (\mathbf{M} / \mathrm{d}t + \mathbf{R} - \tfrac{1}{2} \mathbf{K})^{-1} (\mathbf{F} - \boldsymbol{\omega} \times (\mathbf{I} \boldsymbol{\omega}) - \mathbf{R} \mathbf{V}), \quad \mathbf{K} = \partial (-\boldsymbol{\omega} \times (\mathbf{I} \boldsymbol{\omega})) / \partial \boldsymbol{\omega} \]

Discretisation#

Linearly implicit midpoint (a Rosenbrock step with the exact Jacobian of the gyroscopic term), second order for the gyroscopic term alone: the resistance implicit, every other load at the start of the step; the position from the new velocity, the orientation turned by the exponential of the new angular velocity.

Assumptions#

  • A rigid body whose principal moments are about its body axes

  • The step’s matrix is not symmetric for unequal moments (MIME-ANO-129)

  • The rotation rate times the step is below about one half: past it the gyroscopic term is not resolved and nothing refuses the run (MIME-ANO-129)

Limitations#

none declared

Declared regimes (not evidenced here)#

none declared

References#

[@PeraireWidnall2009], [@Sola2017]

Symbols#

Symbol

Kind

Name

Units

Implemented by

\(\mathbf{M}\)

parameter

mass

kg (units declared, not checked)

mime.nodes.body._rigid_inertial.RigidInertialNode.advance

\(\mathbf{I}\)

parameter

inertia

kg m^2 (units declared, not checked)

mime.nodes.body._rigid_inertial.RigidInertialNode.advance

\(\mathbf{R}\)

input

resistance

N s/m; N s; N m s

mime.nodes.body._rigid_inertial.RigidInertialNode.advance

\(\mathbf{F}\)

input

applied_wrench

N; N m

mime.nodes.body._rigid_inertial.RigidInertialNode.advance

\(\mathbf{V}\)

state

twist

m/s; rad/s

mime.nodes.body._rigid_inertial.RigidInertialNode.advance

\(\boldsymbol{\omega}\)

state

twist

m/s; rad/s

mime.nodes.body._rigid_inertial.RigidInertialNode.advance

\(\mathbf{K}\)

parameter

inertia

kg m^2 (units declared, not checked)

mime.nodes.body._rigid_inertial.RigidInertialMidpointNode.stepping_mass

A row marked units declared, not checked has the units its author wrote: the code declares none there, so the node walk cannot compare them with anything.

Built by#