# 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 - [`rigid_inertial`](../entries/dynamics/rigid_inertial.md) 0.3.0