OpenSees Cloud
OpenSees AMI
Handling a Doubt
09 Nov 2023 - Michael H. Scott
After a post on the “constraint matrix not identity” warning message, a
couple people followed up (one by post comment and the other by direct
communication) that they didn’t realize the Plain constraint handler
works with equalDOF constraints.
The Plain constraint handler has not always been able to handle equalDOF
constraints–I vaguely recall Frank modifying the Plain handler years
ago to work with equalDOF. So, the doubts about the Plain handler and
equalDOF didn’t come out of nowhere.
Anyway, to clear any doubts about the Plain handler, I made a minimal
example with three nodes, one spring, one boundary condition, and one
equalDOF constraint.

The displacements of nodes 2 and 3 should equal 0.1.
import openseespy.opensees as ops
from math import isclose
k = 100
P = 10
ops.wipe()
ops.model('basic','-ndm',1,'-ndf',1)
ops.node(1,0); ops.fix(1,1)
ops.node(2,0)
ops.uniaxialMaterial('Elastic',1,k)
ops.element('zeroLength',1,1,2,'-mat',1,'-dir',1)
ops.node(3,0)
ops.equalDOF(3,2,1)
ops.timeSeries('Constant',1)
ops.pattern('Plain',1,1)
ops.load(3,P)
ops.constraints('Plain')
ops.analysis('Static')
ops.analyze(1)
assert isclose(P/k,ops.nodeDisp(2,1))
assert isclose(P/k,ops.nodeDisp(3,1))
Run the above script and you’ll see that the Plain handler enforced the
equalDOF constraint, i.e., the displacements of nodes 2 and 3 are both
0.1. No errors. No warnings. No doubts.
I work on problems related to modeling and nonlinear structural analysis. If these problems are relevant to a current professional project, feel free to reach out.