OpenSees Cloud

OpenSees AMI

Inerters Everywhere

Original Post - 13 Nov 2021 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


Vibration control devices based on relative acceleration, or inerters, are all the rage these days. So it’s no surprise that inerter models are making their way into OpenSees. As far as I know, two inerter elements are available: InertiaTruss and Inerter. There has also been a third attempt at inerters, but via a material model.

Just like a regular truss element, the InertiaTruss element, merged with PR #619, computes inertial force between two nodes with a linear basic force-acceleration relationship \(f_I=b\ddot{u}_b\), where b is the inertance and \(\ddot{u}_b\) is the relative acceleration along the element.

ops.element('InertiaTruss',tag,ndI,ndJ,b)

The InertiaTruss element works in 1, 2, and 3 dimensions with 1, 2, 3, or 6 DOFs per node. Note that this element adds a small amount of material stiffness to avoid numerical errors in the global solution, e.g., for eigenvalues or dynamic response.

The Inerter element is analogous to the TwoNodeLink element, allowing you to define inertance in multiple directions between two nodes. The inertance can be coupled between directions, e.g., between a translational and rotational DOF. Accordingly, the Inerter element takes an inertance matrix as input.

b = [m1,0,0,i4] # Uncoupled 2x2 inertance
b = [m1,mi,mi,i4] # Coupled 2x2 inertance
ops.element('inerter',tag,ndI,ndJ,'-dir',1,4,'-inertance',*b,'-orient',x1,x2,x3,y1,y2,y3)

The Inerter element does not add artificial material stiffness to mitigate numerical errors in the global solution, so you’ll have to DIY that with additional elements.

A third inerter implementation almost came into OpenSees not as an element, but as a UniaxialMaterial. The PR (#595) for the GyroMassMaterial was closed by the implementer before we merged it. I like this approach, but there are some logistical issues. Because the UniaxialMaterial interface only deals with strain and strain rate, any inerter material must implement an internal time stepping algorithm, e.g., Newmark, to get strain acceleration. This could lead to inconsistencies with the global time stepping algorithm.

Of course, we could get around this time stepping issue with a material wrapper analogous to DamperMaterial, but for strain acceleration instead of velocity. Then you could easily start playing with nonlinear inertance relationships. Maybe even use Concrete23 for inertance–but just because you could do that doesn’t mean you should.