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.
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.
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.
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.
We also cannot control the displacement at a DOF that is fixed.
You will get the following error from OpenSees stating that the controlled DOF 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!