A confluence of recent inquiries led me to take a look at what the
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
We can learn a lot from a couple springs, so I created the 1D (ndm=1, ndf=1) model shown below.
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
nodeUnbalance after issuing the
reactions('-dynamic') at each time step in a dynamic analysis are shown below.
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