OpenSees Cloud

OpenSees AMI

Reaction and Unbalance

Original Post - 09 May 2021 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


A confluence of recent inquiries led me to take a look at what the nodeReaction and nodeUnbalance commands return in an OpenSees dynamic analysis. While I have a pretty good handle on nodeReaction, going in to this post, I was unsure about nodeUnbalance.

We can learn a lot from a couple springs, so I created the 1D model shown below.

Two DOF spring-mass system

Each element has stiffness and damping defined through an elastic uniaxial material and the applied loads are step functions, i.e., assigned to a constant time series.

The values obtained from nodeReaction and nodeUnbalance after issuing the reactions() and reactions('-dynamic') commands at each time step in a dynamic analysis are shown below.

Nodal reactions

Because the reactions() command only assembles static and damping forces from elements, reactions are reported at nodes 2 and 3 in this case. You can verify that these reactions are equal to the mass times acceleration at each node. Also note that we “damp out” to the static equilibrium solution at all nodes.

When we use reactions('-dynamic'), the reactions at nodes 2 and 3 are zero, as expected.

On the bright side, the reaction at the support, node 1, is the same in both cases. So, you don’t really have anything to worry about unless you are looking at the reactions of unconstrained DOFs.

Turning our attention to the nodeUnbalance command, we see that it returns the applied load at each node. Useful? Yes. Interesting? No. But I’m sure there’s other cases where nodeUnbalance gives more interesting results–maybe with member loads or element mass?



Please do give this simple example a try at home. If you’re feeling brave, try to make sense out of the results obtained when constraining node 2 to node 3 with the equalDOF command.