OpenSees Cloud

OpenSees AMI

Losing Displacement Control

Original Post - 21 Nov 2023 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


The DisplacementControl static integrator is commonly employed in nonlinear static pushover analysis. Unlike LoadControl, a displacement-controlled analysis is able to get past limit points of the model response.

Displacement control requires a reference load pattern, a linear time series, and a nodal DOF to control during the analysis. This post will address ways to win and lose at displacement control in OpenSees.

Consider a linear-elastic cantilever split into two elements. In the most common displacement control use case, we can impose free end transverse displacement with a reference load at and in the direction of the displacement.

Load and controlled displacement at same DOF

The script for this model and displacement control analysis is shown below. The getLoadFactor function returns the load factor applied to the reference load by the displacement control integrator.

import openseespy.opensees as ops

ops.wipe()
ops.model('basic','-ndm',2,'-ndf',3)

L = 100
E = 29000
A = 20
I = 1400

ops.node(1,0,0); ops.fix(1,1,1,1)
ops.node(2,0.5*L,0)
ops.node(3,L,0)

ops.geomTransf('Linear',1)

ops.element('elasticBeamColumn',1,1,2,A,E,I,1)
ops.element('elasticBeamColumn',2,2,3,A,E,I,1)

ops.timeSeries('Linear',1)
ops.pattern('Plain',1,1)
ops.load(3,0,1.0,0)

dU = 1.0
ops.integrator('DisplacementControl',3,2,dU)
ops.analysis('Static','-noWarnings')

ops.analyze(1)

print(ops.getLoadFactor(1))

In a less common use case, the reference load and the controlled displacement do not have to correspond to the same DOF. We can also define the reference load at a DOF whose response depends on the displacement at the controlled node, either at the same node or a different node.

Load and controlled displacement at different DOFs

Modify the script and try it out for yourself. You can also impose a unit rotation at node 3 with the reference loads shown above–Müller-Breslau would be proud.

We cannot, however, define the reference load at a DOF whose response is not affected by the controlled displacement, e.g., a horizontal DOF of the cantilever.

Load and controlled displacement at orthogonal DOFs

In this case, you will get an error from OpenSees, basically stating that the reference load does not produce a displacement at and in the direction of the controlled DOF.

Error with orthogonal load and controlled DOF

We also cannot control the displacement at a DOF that is fixed.

Controlled displacement at a fixed DOF

You will get the following error from OpenSees stating that the controlled DOF is fixed.

Error with controlled DOF that is fixed

If you want to impose a support displacement, use the sp (single-point constraint) command instead.

Things get a little bit funky with multi-point constraints and displacement control. In another case of don’t-daisy-chain, always control the DOF of the primary node in the constraint. If you control a DOF at a secondary node, you may get strange numerical results and no error!